MyBatis(iBatis)是一个Java持久层的框架,其支持定制化SQL和使用简单的XML或注解来配置映射关系,加之其开源等特性,使得MyBatis成为一个优秀而又应用广泛的技术框架。本文和大家分享交流MyBatis的基本使用,希望能够对大家有所帮助。
一、准备环境
这里我们新建一个java项目即可,导入需要的jar包,整个操作流程较为简单,项目结构图如下:
二、连接数据库
(1)这里我们需要建立一个测试用的数据库(表),并配置数据库连接。数据库表设计截图如下:
(2)编写数据库连接的配置文件(项目结构图中的config.xml),这里我们放在src下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <typeAlias alias="User" type="com.ldl.mybatis.User"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/ldl/mybatis/UserMapper.xml"/> </mappers> </configuration>
(3)加入实体类映射文件配置,即蓝色字体部分。
三、java编码
(1)添加实体类
这里,我们新建一个实体类User,对应数据库的User表,包含id,userName,password三个属性字段,并生成get(),set()和toString()方法:
package com.ldl.mybatis;
public class User {
private Integer id; private String userName; private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "[id=" + id + ", userName=" + userName + ", password=" + password + "]"; } } (2)添加实体类映射文件
新建UserMapper.xml,并在文件中,按照MyBatis的规范格式编写增删改查以及批量删除的手动sql语句(该映射文件头部大家在官网拷贝过来直接使用即可):
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" > <mapper namespace="com.ldl.mybatis.UserDao">
<insert id="insert" parameterType="User"> insert into user(userName,password) values(#{userName},#{password}) </insert>
<select id="getUserList" resultType="com.ldl.mybatis.User"> select * from user </select>
<select id="getUserById" parameterType="int" resultType="com.ldl.mybatis.User"> select * from user where id=#{id} </select>
<update id="updateUser" parameterType="com.ldl.mybatis.User"> update user set userName=#{userName},password=#{password} where id=#{id} </update>
<delete id="deleteUserById" parameterType="int"> delete from user where id=#{id} </delete> <delete id="deleteUserByIds" parameterType="java.util.List"> delete from user where id in( <foreach collection="list" item="id" separator=","> #{id} </foreach> ) </delete> </mapper>
(3)编写User类接口
新建一个interface,并编写获取用户列表、根据id获取用户信息、添加用户、编辑用户、根据id删除用户、批量删除用户等接口。
package com.ldl.mybatis;
import java.util.List;
public interface UserDao {
public List<User> getUserList(); public User getUserById(Integer id); public void insert(User user); public void updateUser(User user); public void deleteUserById(Integer id); public void deleteUserByIds(List ids); }
四、测试类
首先,我们读取MyBatis的配置文件config.xml,并产生sessionFactory,进而创建session,这样我们就可以执行我们的持久化操作了。依次编写各方法实现代码如下:
package com.ldl.mybatis;
import java.io.IOException; import java.io.Reader; import java.util.ArrayList; import java.util.List;
import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisTest {
private static SqlSessionFactory sessionFactory; private static SqlSession session; public static void main(String[] args) throws IOException { Reader reader = Resources.getResourceAsReader("config.xml"); sessionFactory = new SqlSessionFactoryBuilder().build(reader); session = sessionFactory.openSession(); // getUserList(); // insert(); // deleteById(); // deleteByIds(); // updateUser(); // getUserById(); } private static void insert() { session = sessionFactory.openSession(); UserDao userDao = session.getMapper(UserDao.class); User user = new User(); user.setUserName("赵六"); user.setPassword("123456"); userDao.insert(user); session.commit(); session.close(); getUserList(); } private static void deleteById() { session = sessionFactory.openSession(); UserDao userDao = session.getMapper(UserDao.class); userDao.deleteUserById(12); session.commit(); session.close(); getUserList(); } private static void deleteByIds() { session =sessionFactory.openSession(); UserDao userDao = session.getMapper(UserDao.class); List list = new ArrayList<>(); list.add(10); list.add(11); userDao.deleteUserByIds(list); session.commit(); session.close(); getUserList(); } private static void updateUser() { session = sessionFactory.openSession(); UserDao userDao = session.getMapper(UserDao.class); User user = userDao.getUserById(8); user.setPassword("new123"); userDao.updateUser(user); session.commit(); session.close(); getUserList(); } private static List<User> getUserList(){ session = sessionFactory.openSession(); UserDao userDao = session.getMapper(UserDao.class); List<User> list = userDao.getUserList(); for (User user : list) { System.out.println(user); } session.commit(); session.close(); return list; } private static User getUserById() { session =sessionFactory.openSession(); UserDao userDao = session.getMapper(UserDao.class); User user = userDao.getUserById(9); System.out.println(user); session.commit(); session.close(); return user; } }
五、测试效果
1.获取用户列表:
2.添加用户:
3.根据id删除用户:
4.批量删除用户:
5.编辑用户:
6.根据id获取用户信息:
至此,演示了MyBatis基于MySQL的增删改查等基本操作。