MyBatis对表执行CRUD操作

雨点打透心脏的1/2处 2022-07-13 00:39 285阅读 0赞

一、使用MyBatis对表执行CRUD操作——基于XML的实现

1、定义sql映射xml文件

  userMapper.xml文件的内容如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离 注意:使用mapper代理方法开发,namespace有特殊重要的作用 -->
  6. <mapper namespace="com.baowei.entity.User">
  7. <!-- 在 映射文件中配置很多sql语句 -->
  8. <!-- 需求:通过id查询用户表的记录 -->
  9. <!-- 通过 select执行数据库查询 id:标识 映射文件中的 sql 将sql语句封装到mappedStatement对象中,所以将id称为statement的id
  10. parameterType:指定输入 参数的类型,这里指定int型 #{}表示一个占位符号 #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入
  11. 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 -->
  12. <select id="findUserById" parameterType="int" resultType="com.baowei.entity.User">
  13. SELECT
  14. * FROM USER WHERE id=#{value}
  15. </select>
  16. <!-- 根据用户名称模糊查询用户信息,可能返回多条 resultType:指定就是单条记录所映射的java对象 类型 ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。
  17. 使用${}拼接sql,引起 sql注入 ${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value -->
  18. <select id="findUserByName" parameterType="java.lang.String"
  19. resultType="com.baowei.entity.User">
  20. SELECT * FROM USER WHERE name LIKE '%${value}%'
  21. </select>
  22. <!-- 添加用户 parameterType:指定输入 参数类型是pojo(包括 用户信息) #{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值 -->
  23. <insert id="insertUser" parameterType="com.baowei.entity.User">
  24. <!-- 将插入数据的主键返回,返回到user对象中 SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用与自增主键
  25. keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性 order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序
  26. resultType:指定SELECT LAST_INSERT_ID()的结果类型 -->
  27. <selectKey keyProperty="id" order="AFTER" resultType="int">
  28. SELECT
  29. LAST_INSERT_ID()
  30. </selectKey>
  31. insert into user(name,age)
  32. values(#{name},#{age})
  33. </insert>
  34. <!-- 删除 用户 根据id删除用户,需要输入 id值 -->
  35. <delete id="deleteUser" parameterType="java.lang.Integer">
  36. delete from user where
  37. id=#{id}
  38. </delete>
  39. <!-- 根据id更新用户 分析: 需要传入用户的id 需要传入用户的更新信息 parameterType指定user对象,包括 id和更新信息,注意:id必须存在
  40. #{id}:从输入 user对象中获取id属性值 -->
  41. <update id="updateUser" parameterType="com.baowei.entity.User">
  42. update user set
  43. name=#{name},age=#{age}
  44. where id=#{id}
  45. </update>
  46. </mapper>

2、在SqlMapConfig.xml中的配置

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <properties resource="db.properties">
  7. </properties>
  8. <environments default="development">
  9. <environment id="development">
  10. <!-- 使用jdbc事务管理,事务控制由mybatis -->
  11. <transactionManager type="JDBC" />
  12. <!-- 数据库连接池,由mybatis管理 -->
  13. <dataSource type="POOLED">
  14. <property name="driver" value="${jdbc.driver}" />
  15. <property name="url" value="${jdbc.url}" />
  16. <property name="username" value="${jdbc.username}" />
  17. <property name="password" value="${jdbc.password}" />
  18. </dataSource>
  19. </environment>
  20. </environments>
  21. <!-- 加载 映射文件 -->
  22. <mappers>
  23. <!-- 注册userMapper.xml文件, userMapper.xml位于com.baowei.mapping/这个包下,所以resource写成com/baowei/mapping/userMapper.xml -->
  24. <mapper resource="com/baowei/mapping/userMapper.xml" />
  25. </mappers>
  26. </configuration>

  

3、单元测试类代码如下:

  1. import java.io.InputStream;
  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  6. import org.junit.Before;
  7. import org.junit.Test;
  8. import com.baowei.entity.User;
  9. public class UserDaoXmlTest {
  10. private SqlSession sqlSession;
  11. @Before
  12. public void setUp() throws Exception {
  13. String resource = "SqlMapConfig.xml";
  14. InputStream inputStream = Resources.getResourceAsStream(resource);
  15. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
  16. .build(inputStream);
  17. sqlSession = sqlSessionFactory.openSession();
  18. }
  19. @Test
  20. public void testFindUserById() throws Exception {
  21. String statement = "com.baowei.entity.User.findUserById";// 映射sql的标识字符串
  22. // 执行查询返回一个唯一user对象的sql
  23. User user = sqlSession.selectOne(statement, 2);
  24. System.out.println(user);
  25. }
  26. @Test
  27. public void testfindUserByName() throws Exception {
  28. String statement = "com.baowei.entity.User.findUserByName";// 映射sql的标识字符串
  29. // 执行查询返回一个唯一user对象的sql
  30. User user = sqlSession.selectOne(statement, "1111");
  31. System.out.println(user);
  32. }
  33. @Test
  34. public void testinsertUser() throws Exception {
  35. String statement = "com.baowei.entity.User.insertUser";// 映射sql的标识字符串
  36. // 执行查询返回一个唯一user对象的sql
  37. User user = new User();
  38. user.setAge(4444);
  39. user.setName("44");
  40. sqlSession.insert(statement, user);
  41. sqlSession.commit();
  42. System.out.println(user.getId());
  43. }
  44. @Test
  45. public void testdeleteUser() throws Exception {
  46. String statement = "com.baowei.entity.User.deleteUser";// 映射sql的标识字符串
  47. // 执行查询返回一个唯一user对象的sql
  48. sqlSession.insert(statement, 19);
  49. sqlSession.commit();
  50. }
  51. @Test
  52. public void testupdateUser() throws Exception {
  53. String statement = "com.baowei.entity.User.updateUser";// 映射sql的标识字符串
  54. // 执行查询返回一个唯一user对象的sql
  55. User user = new User();
  56. user.setId(19);
  57. user.setAge(122);
  58. user.setName("12");
  59. sqlSession.update(statement, user);
  60. sqlSession.commit();
  61. }
  62. }

二、使用MyBatis对表执行CRUD操作——基于注解的实现

  1、定义sql映射的接口

  IUserMapper接口的代码如下:

  1. import java.util.List;
  2. import org.apache.ibatis.annotations.Delete;
  3. import org.apache.ibatis.annotations.Insert;
  4. import org.apache.ibatis.annotations.Select;
  5. import org.apache.ibatis.annotations.Update;
  6. import com.baowei.entity.User;
  7. public interface IUserMapper {
  8. // 使用@Insert注解指明add方法要执行的SQL
  9. @Insert("insert into user(name, age) values(#{name}, #{age})")
  10. public int add(User user);
  11. // 使用@Delete注解指明deleteById方法要执行的SQL
  12. @Delete("delete from user where id=#{id}")
  13. public int deleteById(int id);
  14. // 使用@Update注解指明update方法要执行的SQL
  15. @Update("update user set name=#{name},age=#{age} where id=#{id}")
  16. public int update(User user);
  17. // 使用@Select注解指明getById方法要执行的SQL
  18. @Select("select * from user where id=#{id}")
  19. public User getById(int id);
  20. // 使用@Select注解指明getAll方法要执行的SQL
  21. @Select("select * from user")
  22. public List<User> getAll();
  23. }

  需要说明的是,我们不需要针对UserMapperI接口去编写具体的实现类代码,这个具体的实现类由MyBatis帮我们动态构建出来,我们只需要直接拿来使用即可。

  2、在SqlMapConfig.xml.xml文件中注册这个映射接口

  1. <!DOCTYPE configuration
  2. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <properties resource="db.properties">
  6. </properties>
  7. <environments default="development">
  8. <environment id="development">
  9. <!-- 使用jdbc事务管理,事务控制由mybatis -->
  10. <transactionManager type="JDBC" />
  11. <!-- 数据库连接池,由mybatis管理 -->
  12. <dataSource type="POOLED">
  13. <property name="driver" value="${jdbc.driver}" />
  14. <property name="url" value="${jdbc.url}" />
  15. <property name="username" value="${jdbc.username}" />
  16. <property name="password" value="${jdbc.password}" />
  17. </dataSource>
  18. </environment>
  19. </environments>
  20. <!-- 加载 映射文件 -->
  21. <mappers>
  22. <!-- 注册userMapper.xml文件, 19 userMapper.xml位于com.baowei.mapping/这个包下,所以resource写成com/baowei/mapping/userMapper.xml -->
  23. <!-- <mapper resource="com/baowei/mapping/userMapper.xml" /> -->
  24. <!-- 注册UserMapper映射接口 -->
  25. <mapper class="com.baowei.mapping.IUserMapper" />
  26. </mappers>
  27. </configuration>

  单元测试类的代码如下:

  1. import java.io.InputStream;
  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  6. import org.junit.Before;
  7. import org.junit.Test;
  8. import com.baowei.entity.User;
  9. import com.baowei.mapping.IUserMapper;
  10. public class UserDaoAnnationTest {
  11. private SqlSession sqlSession;
  12. @Before
  13. public void setUp() throws Exception {
  14. String resource = "SqlMapConfig.xml";
  15. InputStream inputStream = Resources.getResourceAsStream(resource);
  16. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
  17. .build(inputStream);
  18. sqlSession = sqlSessionFactory.openSession();
  19. }
  20. @Test
  21. public void testFindUserById() throws Exception {
  22. // 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
  23. IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
  24. User user = mapper.getById(1);
  25. // 使用SqlSession执行完SQL之后需要关闭SqlSession
  26. sqlSession.close();
  27. System.out.println(user.toString());
  28. }
  29. @Test
  30. public void testinsertUser() throws Exception {
  31. // 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
  32. IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
  33. User user = new User();
  34. user.setName("666");
  35. user.setAge(20);
  36. int add = mapper.add(user);
  37. sqlSession.commit();
  38. // 使用SqlSession执行完SQL之后需要关闭SqlSession
  39. sqlSession.close();
  40. System.out.println(add);
  41. }
  42. @Test
  43. public void testdeleteUser() throws Exception {
  44. // 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
  45. IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
  46. mapper.deleteById(22);
  47. sqlSession.commit();
  48. // 使用SqlSession执行完SQL之后需要关闭SqlSession
  49. sqlSession.close();
  50. }
  51. @Test
  52. public void testupdateUser() throws Exception {
  53. // 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
  54. IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
  55. User user = new User();
  56. user.setId(22);
  57. user.setName("777");
  58. user.setAge(20);
  59. mapper.update(user);
  60. sqlSession.commit();
  61. // 使用SqlSession执行完SQL之后需要关闭SqlSession
  62. sqlSession.close();
  63. }
  64. }

三、使用MyBatis对表执行CRUD操作——基于Mapper代理的实现

  1. 1、定义UserMapper.java的接口,和userMapper.xml的映射文件
  2. ![20161217133705709][]
  3. 2、关于userMapper.xml的配置
  4. ![20161217133813121][]
  5. 3UserMapper.java的内容
  6. import java.util.List;
  7. import com.baowei.entity.User;
  8. public interface UserMapper {
  9. public User findUserById(int id) throws Exception;
  10. public List<User> findUserByName(String name) throws Exception;
  11. public void insertUser(User user) throws Exception;
  12. public void deleteUser(int id) throws Exception;
  13. public void updateUser(User user) throws Exception;
  14. }
  15. 4userMapper.xml的内容
  16. <?xml version="1.0" encoding="UTF-8" ?>
  17. <!DOCTYPE mapper
  18. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  19. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  20. <!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离 注意:使用mapper代理方法开发,namespace有特殊重要的作用 -->
  21. <mapper namespace="com.baowei.mapper.UserMapper">
  22. <!-- 映射文件中配置很多sql语句 -->
  23. <!-- 需求:通过id查询用户表的记录 -->
  24. <!-- 通过 select执行数据库查询 id:标识 映射文件中的 sql sql语句封装到mappedStatement对象中,所以将id称为statementid
  25. parameterType:指定输入 参数的类型,这里指定int #{}表示一个占位符号 #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入
  26. 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 -->
  27. <select id="findUserById" parameterType="int" resultType="com.baowei.entity.User">
  28. SELECT
  29. * FROM USER WHERE id=#{value}
  30. </select>
  31. <!-- 根据用户名称模糊查询用户信息,可能返回多条 resultType:指定就是单条记录所映射的java对象 类型 ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。
  32. 使用${}拼接sql,引起 sql注入 ${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value -->
  33. <select id="findUserByName" parameterType="java.lang.String"
  34. resultType="com.baowei.entity.User">
  35. SELECT * FROM USER WHERE name LIKE '%${value}%'
  36. </select>
  37. <!-- 添加用户 parameterType:指定输入 参数类型是pojo(包括 用户信息) #{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值 -->
  38. <insert id="insertUser" parameterType="com.baowei.entity.User">
  39. <!-- 将插入数据的主键返回,返回到user对象中 SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用与自增主键
  40. keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性 orderSELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序
  41. resultType:指定SELECT LAST_INSERT_ID()的结果类型 -->
  42. <selectKey keyProperty="id" order="AFTER" resultType="int">
  43. SELECT
  44. LAST_INSERT_ID()
  45. </selectKey>
  46. insert into user(name,age)
  47. values(#{name},#{age})
  48. </insert>
  49. <!-- 删除 用户 根据id删除用户,需要输入 id -->
  50. <delete id="deleteUser" parameterType="java.lang.Integer">
  51. delete from user where
  52. id=#{id}
  53. </delete>
  54. <!-- 根据id更新用户 分析: 需要传入用户的id 需要传入用户的更新信息 parameterType指定user对象,包括 id和更新信息,注意:id必须存在
  55. #{id}:从输入 user对象中获取id属性值 -->
  56. <update id="updateUser" parameterType="com.baowei.entity.User">
  57. update user set
  58. name=#{name},age=#{age}
  59. where id=#{id}
  60. </update>
  61. </mapper>
  62. 5、在SqlMapConfig.xml的而配置
  63. <?xml version="1.0" encoding="UTF-8" ?>
  64. <!DOCTYPE configuration
  65. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  66. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  67. <configuration>
  68. <properties resource="db.properties">
  69. </properties>
  70. <environments default="development">
  71. <environment id="development">
  72. <!-- 使用jdbc事务管理,事务控制由mybatis -->
  73. <transactionManager type="JDBC" />
  74. <!-- 数据库连接池,由mybatis管理 -->
  75. <dataSource type="POOLED">
  76. <property name="driver" value="${jdbc.driver}" />
  77. <property name="url" value="${jdbc.url}" />
  78. <property name="username" value="${jdbc.username}" />
  79. <property name="password" value="${jdbc.password}" />
  80. </dataSource>
  81. </environment>
  82. </environments>
  83. <!-- 加载 映射文件 -->
  84. <mappers>
  85. <mapper class="com.baowei.mapper.UserMapper" />
  86. </mappers>
  87. </configuration>
  88. 6、测试代码
  89. import java.io.InputStream;
  90. import org.apache.ibatis.io.Resources;
  91. import org.apache.ibatis.session.SqlSession;
  92. import org.apache.ibatis.session.SqlSessionFactory;
  93. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  94. import org.junit.Before;
  95. import org.junit.Test;
  96. import com.baowei.entity.User;
  97. import com.baowei.mapper.UserMapper;
  98. public class UserDaoMapperTest {
  99. private SqlSession sqlSession;
  100. @Before
  101. public void setUp() throws Exception {
  102. String resource = "SqlMapConfig.xml";
  103. InputStream inputStream = Resources.getResourceAsStream(resource);
  104. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
  105. .build(inputStream);
  106. sqlSession = sqlSessionFactory.openSession();
  107. }
  108. @Test
  109. public void testFindUserById() throws Exception {
  110. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  111. User user = mapper.findUserById(1);
  112. sqlSession.close();
  113. System.out.println(user.toString());
  114. }
  115. @Test
  116. public void testinsertUser() throws Exception {
  117. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  118. User user = new User();
  119. user.setName("666");
  120. user.setAge(20);
  121. mapper.insertUser(user);
  122. sqlSession.commit();
  123. sqlSession.close();
  124. }
  125. @Test
  126. public void testdeleteUser() throws Exception {
  127. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  128. mapper.deleteUser(23);
  129. sqlSession.commit();
  130. // 使用SqlSession执行完SQL之后需要关闭SqlSession
  131. sqlSession.close();
  132. }
  133. @Test
  134. public void testupdateUser() throws Exception {
  135. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  136. User user = new User();
  137. user.setId(23);
  138. user.setName("777");
  139. user.setAge(20);
  140. mapper.updateUser(user);
  141. sqlSession.commit();
  142. // 使用SqlSession执行完SQL之后需要关闭SqlSession
  143. sqlSession.close();
  144. }
  145. }

四、代码下载

代码下载

发表评论

表情:
评论列表 (有 0 条评论,285人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Mybatis实现CRUD操作

    项目实现的功能 查询所有用户信息 通过Id查询用户信息 添加用户(回显主键) 修改用户信息 删除用户信息 通过用户名字模糊查询 一、引入依赖和工程