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的增删改查等基本操作。