MyBatis配置文件增删查改解析及手动映射操作

你的名字 2023-03-13 12:23 30阅读 0赞

主配置文件 mybatis-config.xml

在项目的 src (类路径 classpath) 下面创建 配置文件 mybatis-config.xml
具体配置可参考mybatis的官方文档

  1. <!-- xml 约束,约束下面可以使用那些标签 (元素)-->
  2. <?xml version="1.0" encoding="UTF-8" ?><!-- xml声明,固定语法 -->
  3. <!DOCTYPE configuration
  4. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  5. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  6. <!--
  7. 开启Mybatis的配置
  8. <configuration> 根元素,任何html文件都有一个根元素
  9. -->
  10. <configuration>
  11. <!-- 读取数据库配置文件 -->
  12. <properties resource="db.properties"/>
  13. <!-- 设置 -->
  14. <settings>
  15. <!-- 开启支持驼峰命名法 -->
  16. <setting name="mapUnderscoreToCamelCase" value="true"/>
  17. </settings>
  18. <!-- 配置别名 -->
  19. <typeAliases>
  20. <!-- 配置单个别名 -->
  21. <typeAlias type="com.ywq.mybatis.pojo.User" alias="User"/>
  22. <!-- 使用包扫描配置别名,包下面所有pojo类都回设置别名,简单类名首字母变小写(不区分大小写) -->
  23. <package name="com.ywq.mybatis.pojo"/>
  24. </typeAliases>
  25. <!--
  26. 配置Mybatis的环境
  27. <environments default="mysql">
  28. default:默认的环境,值就是内部<environment id="mysql">的id值
  29. -->
  30. <environments default="mysql">
  31. <!--
  32. 具体环境标识
  33. <environment id="mysql">
  34. id:当前环境唯一标识 见名知意
  35. -->
  36. <environment id="mysql">
  37. <!-- 事务管理器(操作数据库有事务概念),使用默认JDBC (MyBatis底层就是封装原生JDBC)事务 -->
  38. <transactionManager type="JDBC"/>
  39. <!-- 配置数据域(连接池)
  40. <dataSource type="POOLED">
  41. type:数据域类型POOLED,MyBatis内置的一个数据域
  42. 使用框架开发连接数据全部都是使用数据源连接,使用阿里巴巴连接池,Apache的DBCP连接池(和Spring框架集成详细配置)
  43. -->
  44. <dataSource type="POOLED">
  45. <!-- 数据库驱动 -->
  46. <property name="driver" value="${driverClassName}"/>
  47. <!-- 连接数据库url地址 -->
  48. <property name="url" value="${url}"/>
  49. <!-- 数据库账号 -->
  50. <property name="username" value="${username}"/>
  51. <!-- 数据库密码 -->
  52. <property name="password" value="${password}"/>
  53. </dataSource>
  54. </environment>
  55. </environments>
  56. <!-- 配置MyBatis的映射文件 -->
  57. <mappers>
  58. <mapper resource="com/ywq/mybatis/mapper/UserMapper.xml"/>
  59. </mappers>
  60. </configuration>

获取Session代码块文件

  1. package com.ywq.mybatis.util;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import org.apache.ibatis.io.Resources;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8. public class MyBatisUtils {
  9. private MyBatisUtils() {
  10. }
  11. private static SqlSessionFactory factory;
  12. //只运行一次
  13. static{
  14. String resource = "mybatis-config.xml";
  15. try(InputStream inputStream = Resources.getResourceAsStream(resource);){
  16. factory = new SqlSessionFactoryBuilder().build(inputStream);
  17. } catch (IOException e) {
  18. // TODO Auto-generated catch block
  19. e.printStackTrace();
  20. }
  21. }
  22. //获得openSession
  23. public static SqlSession openSession() {
  24. SqlSession openSession = factory.openSession();
  25. return openSession;
  26. }
  27. }

pojo类代码

  1. package com.ywq.mybatis.pojo;
  2. public class User {
  3. private Integer uId ;
  4. private String uName;
  5. private String uPassword;
  6. private Integer uAge;
  7. public User() {
  8. super();
  9. }
  10. public User(Integer uId, String uName, String uPassword, Integer uAge) {
  11. super();
  12. this.uId = uId;
  13. this.uName = uName;
  14. this.uPassword = uPassword;
  15. this.uAge = uAge;
  16. }
  17. public Integer getuId() {
  18. return uId;
  19. }
  20. public void setuId(Integer uId) {
  21. this.uId = uId;
  22. }
  23. public String getuName() {
  24. return uName;
  25. }
  26. public void setuName(String uName) {
  27. this.uName = uName;
  28. }
  29. public String getuPassword() {
  30. return uPassword;
  31. }
  32. public void setuPassword(String uPassword) {
  33. this.uPassword = uPassword;
  34. }
  35. public Integer getuAge() {
  36. return uAge;
  37. }
  38. public void setuAge(Integer uAge) {
  39. this.uAge = uAge;
  40. }
  41. @Override
  42. public String toString() {
  43. return "User [uId=" + uId + ", uName=" + uName + ", uPassword=" + uPassword + ", uAge=" + uAge + "]";
  44. }
  45. }

Mapper接口

  1. package com.ywq.mybatis.mapper;
  2. import java.util.List;
  3. import com.ywq.mybatis.pojo.User;
  4. /*
  5. *mybatis的映射接口
  6. * */
  7. public interface UserMapper {
  8. // DML :增删改
  9. int insert(User user);
  10. int deleteByPrimaryKey(Integer id);
  11. int updateByPrimaryKey(User user);
  12. //DQL : 查询
  13. User selectByPrimaryKey(Integer id);
  14. List<User> selectLits();
  15. }

Mapper.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. <!-- 开启MyBatis的User表的y映射配置
  6. <mapper namespace="">
  7. 映射文件的根元素
  8. namespace:命名空间(映射文件的唯一名称)
  9. 值:必须对应映射接口的全限定名
  10. 全限定名 = 包名+简单名称
  11. -->
  12. <mapper namespace="com.ywq.mybatis.mapper.UserMapper">
  13. <!-- 插入数据
  14. <insert id="" parameterType="">
  15. id:当前操作功能的唯一标识,值必须和映射接口对应的方法名相同
  16. parameterType:参数类型,必须和映射接口对应的方法的参数类型相同(全限定名)
  17. keyColumn="数据表对应的主键列"
  18. keyProperty="pojo对象对应的主键列的属性"
  19. useGeneratedKeys="true" 是否返回自动生成的主键key
  20. -->
  21. <insert id="insert" parameterType="User"
  22. keyColumn="id" keyProperty="uId" useGeneratedKeys="true"
  23. >
  24. <!--
  25. #{
  26. xxx}:OGNL语法
  27. xxx:如果参数是对象或者map集合,xxx就是对象的属性或者map的key
  28. -->
  29. insert into user (Name,Password,Age)values(#{
  30. uName},#{
  31. uPassword},#{
  32. uAge})
  33. </insert>
  34. <!-- 修改功能 -->
  35. <update id="updateByPrimaryKey" parameterType="User">
  36. update user set name = #{
  37. uName},password=#{
  38. uPassword},age=#{
  39. uAge} where id =#{
  40. uId}
  41. </update>
  42. <!-- 删除功能 -->
  43. <delete id="deleteByPrimaryKey" parameterType="Integer">
  44. <!--
  45. #{
  46. xxx}:OGNL语法
  47. xxx:如果方法参数是值类型(string+基本数据类型以及包装类型),并且参数只有一个的情况,
  48. xxx底层直接将值设置到这一参数上,和xxx名称没有关系,xxx理论上可以随便写,一般见名知意
  49. -->
  50. delete from user where id = #{
  51. id}
  52. </delete>
  53. <!-- 单行查询 -->
  54. <!-- resultType : 返回的数据类型,必须和映射接口对应的方法的返回数据类型相同(全限定名) -->
  55. <select id="selectByPrimaryKey" parameterType="Integer" resultMap="user_map">
  56. select id u_id,name u_name,password u_password,age u_age from user where id = #{
  57. id}
  58. </select>
  59. <!-- 手动映射标签
  60. <resultMap type="" id="">
  61. type:要映射的pojo类型(全限定名)
  62. id:唯一标识
  63. -->
  64. <resultMap type="com.ywq.mybatis.pojo.User" id="user_map">
  65. <!-- 主键映射
  66. <id column="" property="" javaType="" jdbcType="" />
  67. column="查询结果集列名"
  68. property="pojo对应属性名称"
  69. javaType="pojo对应的java数据类型【可不写,自动匹配】"
  70. jdbcType="数据表列对应的类型【可不写,自动匹配】"
  71. -->
  72. <id column="u_id" property="uId" javaType="Integer" jdbcType="INTEGER" />
  73. <!-- 非主键映射 -->
  74. <result column="u_name" property="uName" javaType="String" jdbcType="VARCHAR"/>
  75. <result column="u_password" property="uPassword" />
  76. <result column="u_age" property="uAge" />
  77. </resultMap>
  78. <!-- 多行查询 -->
  79. <!-- <select id="" resultType="">
  80. resultType : 无论单行或多行查询,返回的数据类型都是对应的pojo数据类型
  81. -->
  82. <select id="selectLits" resultType="user">
  83. select id u_id,name u_name,password u_password,age u_age from user
  84. </select>
  85. </mapper>

测试代码

  1. package com.ywq.mybatis.test;
  2. import static org.junit.Assert.*;
  3. import java.util.List;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.junit.Test;
  6. import com.ywq.mybatis.mapper.UserMapper;
  7. import com.ywq.mybatis.pojo.User;
  8. import com.ywq.mybatis.util.MyBatisUtils;
  9. public class MyBatisTest {
  10. @Test
  11. public void testInert() throws Exception {
  12. //1.创建SqlSession对象
  13. SqlSession session = MyBatisUtils.openSession();
  14. //2.创建UserMapper映射接口的动态代理对象
  15. UserMapper userMapper = session.getMapper(UserMapper.class);
  16. System.out.println(userMapper.getClass().getName());
  17. //3.执行insert方法
  18. User user = new User(null, "jocn", "2020", 33);
  19. int row = userMapper.insert(user);
  20. System.out.println("受影响的行数:"+row);
  21. //4.MyBatis默认需要手动提交事务
  22. session.commit();
  23. //5.关闭session(释放资源)
  24. session.close();
  25. }
  26. @Test
  27. public void testUpdate() throws Exception {
  28. //1.创建SqlSession对象
  29. SqlSession session = MyBatisUtils.openSession();
  30. //2.创建UserMapper映射接口的动态对立对象
  31. UserMapper mapper = session.getMapper(UserMapper.class);
  32. //3.执行修改方法
  33. User user = new User(6, "fg邦", "5161", 25);
  34. int row = mapper.updateByPrimaryKey(user);
  35. System.out.println("受影响行数"+row);
  36. //4.MyBatis默认需要手动提交事务
  37. session.commit();
  38. //5.关闭session(释放资源)
  39. session.close();
  40. }
  41. @Test
  42. public void testDelete() throws Exception {
  43. //1.创建SqlSession对象
  44. SqlSession session = MyBatisUtils.openSession();
  45. //2.创建UserMapper映射接口的动态对立对象
  46. UserMapper mapper = session.getMapper(UserMapper.class);
  47. //3.执行删除方法
  48. int row = mapper.deleteByPrimaryKey(10);
  49. System.out.println("受影响行数"+row);
  50. //4.MyBatis默认需要手动提交事务
  51. session.commit();
  52. //5.关闭session(释放资源)
  53. session.close();
  54. }
  55. @Test
  56. public void testSelectOne() throws Exception {
  57. //1.创建SqlSession对象
  58. SqlSession session = MyBatisUtils.openSession();
  59. //2.创建UserMapper映射接口的动态对立对象
  60. UserMapper mapper = session.getMapper(UserMapper.class);
  61. //3.执行单行查询方法
  62. User user = mapper.selectByPrimaryKey(5);
  63. System.out.println(user);
  64. //4.MyBatis默认需要手动提交事务
  65. session.commit();
  66. //5.关闭session(释放资源)
  67. session.close();
  68. }
  69. @Test
  70. public void testSelectList() throws Exception {
  71. //1.创建SqlSession对象
  72. SqlSession session = MyBatisUtils.openSession();
  73. //2.创建UserMapper映射接口的动态对立对象
  74. UserMapper mapper = session.getMapper(UserMapper.class);
  75. //3.执行多行查询方法
  76. List<User> users = mapper.selectLits();
  77. for (User user : users) {
  78. System.out.println(user);
  79. }
  80. //4.MyBatis默认需要手动提交事务
  81. session.commit();
  82. //5.关闭session(释放资源)
  83. session.close();
  84. }
  85. }

发表评论

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

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

相关阅读