最基本的增删改查。
一、代码实现
项目结构:
(1)写出sql映射配置文件mapper.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?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是id,必须唯一,有个命名方法就是包名+类名,这里就是test包下的miss类,这样就保证了id是唯一的 --> <mapper namespace="testcrud.mapper"> <!-- 增删改查 --> <select id="getMiss" parameterType="int" resultType="test.miss"> select * from miss where id = #{id} </select> <insert id="addMiss" parameterType="test.miss"> insert into miss(name,age) values(#{name},#{age}) </insert> <delete id="delMiss"> delete from miss where id = #{id} </delete> <update id="updateMiss" parameterType="test.miss"> update miss set name = #{name},age = #{age} where id = #{id} </update> <select id="getAll" resultType="test.miss"> select * from miss </select> </mapper> |
(2)在mybatis配置文件conf.xml下注册刚才的sql配置文件
1 2 3 4 5 |
<!-- 注册mapper --> <mappers> <mapper resource="mapper.xml" /> <mapper resource="testcrud/mapper.xml"/> </mappers> |
(3)写出测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
package testcrud; import java.io.InputStream; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import test.miss; public class test { public static SqlSessionFactory getFactory() { String resource = "conf.xml"; InputStream inputStream = test.class.getClassLoader().getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); return factory; } public void testSelect() { SqlSession sqlSession = getFactory().openSession(); String statement = "testcrud.mapper.getMiss"; miss miss = sqlSession.selectOne(statement, 1); System.out.println(miss.toString()); } // 这里会遇到一个sql执行成功但是数据库中没数据的尴尬情况,因为没有提交 // 默认是手动提交的 public void testAdd() { SqlSession sqlSession = getFactory().openSession(); String statement = "testcrud.mapper.addMiss"; miss miss = new miss(); miss.setName("missfortune"); miss.setAge(233); int insert = sqlSession.insert(statement, miss); // 手动提交 sqlSession.commit(); System.out.println(insert); } public void testUpdate() { SqlSession sqlSession = getFactory().openSession(false); String statement = "testcrud.mapper.updateMiss"; miss miss = new miss(); miss.setId(9); miss.setName("godlikexie"); miss.setAge(666); int update = sqlSession.update(statement, miss); sqlSession.commit(); System.out.println(update); } public void testDelete() { SqlSession sqlSession = getFactory().openSession(true); String statement = "testcrud.mapper.delMiss"; int delete = sqlSession.delete(statement, 9); System.out.println(delete); } @Test public void testselectAll1() { SqlSession sqlSession = getFactory().openSession(true); String statement = "testcrud.mapper.getAll"; List<miss> list = sqlSession.selectList(statement); System.out.println(list.toString()); } } |
二、需要注意的地方
(1)发现工厂类是经常被使用的,所以完全可以拿出来写成一个方法类
1 2 3 4 5 6 |
public static SqlSessionFactory getFactory() { String resource = "conf.xml"; InputStream inputStream = test.class.getClassLoader().getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); return factory; } |
这样就不用每次都去重新创建工厂对象,只要去调用就好了。
原则上来说这个东西最好单独拿出来写个新文件,这里我贪图方便,就直接写在同一个文件里面了。
(2)关于提交
之前忘记设置自动提交事务,就是:
1 |
SqlSession sqlSession = getFactory().openSession(true); |
然后我没有手动提交:
1 |
sqlSession.commit(); |
导致回显成功了,但是并没有更改数据库。
因为mybatis中数据库的操作都是基于事务的,事务完成之后需要提交才能确认更改。
所以:
- 要不就设置true自动提交,openSession(true)。
- 要不就自己手动提交,sqlSession.commit()。
三、总结
记录一下。