环境搭配
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>mybatis-study</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mybatis-01</artifactId>
</project>
//Maven
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
CRUD
如果不设置手动提交事务,那么默认每条插入语句都是一个事务,每次都要提交事务。设置手动提交事务的话,可以在循环前开启事务,循环结束后再提交事务,只需要提交一次事务。
//JDBC中手动关闭事务
connection.setAutoCommit(false);
for(1~1e8);
//将自动提交开启(才会在数据库中刷新,也就是成功插入)
connection.setAutoCommit(true);
//这样可以节约大量的时间
事务:指一组操作要么执行成功,要么执行失败;
-
在所有操作未完成之前,其他回话是不能看到中间过程的;
提交事务:
conn.commit();
出现异常执行回滚:
conn.rollback();
1、编写接口
public interface UserDao {
//查询所有用户
public List<User> getUserList();
//插入用户
public int insertUser(User user);
//更新用户
public int updateUser(User user);
//根据id查询用户
public User queryUser(int id);
//删除用户
public int deleteUser(int id);
}
2、写入对应SQL语句到UserMapper.xml
中
//一个namespace对应一个mapper,代表其中的id不可相同
<mapper namespace="com.zhu.dao.UserDao">
<select id="getUserList" resultType="com.zhu.pojo.User">
select * from mybatis.user
</select>
<select id="queryUser" resultType="com.zhu.pojo.User">
select * from mybatis.user where id = #{id}
</select>
<insert id="insertUser">
insert into user(id, name, pwd) values (#{id},#{name},#{pwd})
</insert>
<update id="updateUser" parameterType = "com.zhu.pojo.User">
update user set name = #{name}, pwd = #{pwd} where id = #{id};
</update>
<delete id="deleteUser" parameterType = "int">
delete from user where id = #{id}
</delete>
</mapper>
3、测试
每一次调用SqlSession
要记得SqlSession.close()
对于增删改,要提交事务Sqlsession.commit()
public class UserDaoTest {
@Test
public void test(){
//获取sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void insert(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
int res = userDao.insertUser(new User(5, "快落", "12333"));
sqlSession.commit();
sqlSession.close();
}
@Test
public void update(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao