参考视频:【狂神说Java】Mybatis最新完整教程IDEA版通俗易懂 点击观看
文章目录
CRUD操作
1、在UserMapper.java接口中添加对应方法
java
package com.findx.dao;
import com.findx.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserMapper {
//模糊查询
List<User> getUserLike(String value);
//查询全部用户
List<User> getUserList();
//根据id查询用户
User getUserById(int id);
//使用Map用id查询用户
User getUserById2(Map<String,Object> map);
//增加用户
int addUser(User user);
//使用Map添加用户
int addUser2(Map<String,Object> map);
//修改用户
int updateUser(User user);
//删除用户
int deleteUser(int id);
}
2、在UserMapper.xml中添加对应XML语句
xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.findx.dao.UserMapper">
<!--select查询语句-->
<select id="getUserList" resultType="com.findx.pojo.User">
select * from mybatis.user
</select>
<select id="getUserById" resultType="com.findx.pojo.User" parameterType="int">
select * from mybatis.user where id = #{id}
</select>
<select id="getUserById2" resultType="com.findx.pojo.User" parameterType="map">
select * from mybatis.user where id = #{useid}
</select>
<!--模糊查询-->
<select id="getUserLike" resultType="com.findx.pojo.User">
select * from mybatis.user where name like #{value}
</select>
<!--对象中的属性可以直接取出来-->
<insert id="addUser" parameterType="com.findx.pojo.User">
insert into mybatis.user (id, name, pwd) values (#{id}, #{name}, #{pwd})
</insert>
<!--传递map的key-->
<insert id="addUser2" parameterType="map">
insert into mybatis.user (id, name, pwd) values (#{useid}, #{usename}, #{usepwd})
</insert>
<update id="updateUser" parameterType="com.findx.pojo.User">
update mybatis.user set name = #{name}, pwd = #{pwd} where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from mybatis.user where id = #{id}
</delete>
</mapper>
3、在测试类中编写对应测试方法运行测试
java
package com.findx.dao;
import com.findx.pojo.User;
import com.findx.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UserDaoTest {
@Test
//模糊查询
public void getUserLike() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserLike("%f%");
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void getUserList() {
// 获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 方式一:getMapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
// 关闭SqlSession对象
sqlSession.close();
}
@Test
public void getUserById() {
// 获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 获取UserMapper接口
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
// 释放资源
sqlSession.close();
}
@Test
//getUserById2
public void getUserById2() {
// 获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 获取UserMapper接口
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("useid", 6);
User user = mapper.getUserById2(map);
System.out.println(user);
sqlSession.close();
}
//增删改需要提交事务
@Test
public void addUser() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.addUser(new User(7, "ffx", "123456"));
if (res > 0) {
System.out.println("插入成功");
}
sqlSession.commit();//提交事务
sqlSession.close();
}
@Test
//addUser2
public void addUser2() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("useid", 6);
map.put("usename", "fx");
map.put("usepwd", "123456");
int res = mapper.addUser2(map);
if (res > 0) {
System.out.println("插入成功");
}
sqlSession.commit();//提交事务
sqlSession.close();
}
@Test
public void updateUser() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.updateUser(new User(4, "zfx", "123456"));
if (res > 0) {
System.out.println("更新成功");
}
sqlSession.commit();//提交事务
sqlSession.close();
}
@Test
public void deleteUser() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.deleteUser(6);
if (res > 0) {
System.out.println("删除成功");
}
sqlSession.commit();//提交事务
sqlSession.close();
}
}
所有的增删改操作都需要提交事务否则不会提交到数据库
配置解析
properties
在资源目录下面新建一个db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username=root
password=root
将文件导入properties配置文件
xml
<!--configuration核心配置文件-->
<configuration>
<!--引入外部配置文件-->
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/findx/dao/UserMapper.xml"/>
</mappers>
</configuration>
typeAliases
xml
<!--configuration核心配置文件-->
<configuration>
<properties resource="db.properties"/>
<!--给实体类起别名-->
<typeAliases>
<typeAlias type="com.findx.pojo.User" alias="User"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/findx/dao/UserMapper.xml"/>
</mappers>
</configuration>
mapper
xml
<!--configuration核心配置文件-->
<configuration>
<properties resource="db.properties"/>
<typeAliases>
<typeAlias type="com.findx.pojo.User" alias="User"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/findx/dao/UserMapper.xml"/>
<!-- <mapper class="com.findx.dao.UserMapper"/>-->
</mappers>
</configuration>
生命周期和作用域
不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。
Mybatis的执行过程

SqlSessionFactoryBuilder的作用在于创建SqlSessionFactory。
SqlSessionFactory可以被认为是一个数据库连接池,它的作用是创建SqlSession接口对象。
如果说SqlSessionFactory相当于数据库连接池,那么SqlSession就相当于一个数据库连接。
SqlSession
