• mybatis实战:二、mybatis xml 方式的基本用法


    注释都在代码里,最好复制了再看!


    1.创建表

    1. CREATE TABLE sys_user(
    2. id BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户 ID',
    3. user_name VARCHAR(50) COMMENT '用户名',
    4. user_password VARCHAR(50) COMMENT '密码',
    5. user_email VARCHAR(50) COMMENT '邮箱',
    6. user_info TEXT COMMENT '简介',
    7. head_img BLOB COMMENT '头像',
    8. create_time DATETIME COMMENT '创建时间',
    9. PRIMARY KEY (id)
    10. );
    11. ALTER TABLE sys_user COMMENT '用户表';
    12. CREATE TABLE sys_role(
    13. id BIGINT NOT NULL AUTO_INCREMENT COMMENT '角色 ID',
    14. role_name VARCHAR(50) COMMENT '角色名',
    15. enabled INT COMMENT '有效标志',
    16. create_by BIGINT COMMENT '创建人',
    17. create_time DATETIME COMMENT '创建时间',
    18. PRIMARY KEY (id)
    19. );
    20. ALTER TABLE sys_role COMMENT '角色表';
    21. CREATE TABLE sys_prvilege(
    22. id BIGINT NOT NULL AUTO_INCREMENT COMMENT '权限 ID',
    23. privilege_name VARCHAR(50) COMMENT '权限名称',
    24. privilege_url VARCHAR (200) COMMENT '权限 URL',
    25. PRIMARY KEY (id)
    26. );
    27. ALTER TABLE sys_prvilege COMMENT '权限表';
    28. CREATE TABLE sys_user_role(
    29. user_id BIGINT COMMENT '用户 ID ',
    30. role_id BIGINT COMMENT '角色 ID'
    31. );
    32. ALTER TABLE sys_user_role COMMENT '用户角色关联表';
    33. CREATE TABLE sys_role_prvilege(
    34. role_id BIGINT COMMENT '角色ID',
    35. privilege_id BIGINT COMMENT 'ID'
    36. );
    37. ALTER TABLE sys_role_prvilege COMMENT '角色权限关联表';

    2.插入数据

    1. CREATE TABLE sys_user(
    2. id BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户 ID',
    3. user_name VARCHAR(50) COMMENT '用户名',
    4. user_password VARCHAR(50) COMMENT '密码',
    5. user_email VARCHAR(50) COMMENT '邮箱',
    6. user_info TEXT COMMENT '简介',
    7. head_img BLOB COMMENT '头像',
    8. create_time DATETIME COMMENT '创建时间',
    9. PRIMARY KEY (id)
    10. );
    11. ALTER TABLE sys_user COMMENT '用户表';
    12. CREATE TABLE sys_role(
    13. id BIGINT NOT NULL AUTO_INCREMENT COMMENT '角色 ID',
    14. role_name VARCHAR(50) COMMENT '角色名',
    15. enabled INT COMMENT '有效标志',
    16. create_by BIGINT COMMENT '创建人',
    17. create_time DATETIME COMMENT '创建时间',
    18. PRIMARY KEY (id)
    19. );
    20. ALTER TABLE sys_role COMMENT '角色表';
    21. CREATE TABLE sys_prvilege(
    22. id BIGINT NOT NULL AUTO_INCREMENT COMMENT '权限 ID',
    23. privilege_name VARCHAR(50) COMMENT '权限名称',
    24. privilege_url VARCHAR (200) COMMENT '权限 URL',
    25. PRIMARY KEY (id)
    26. );
    27. ALTER TABLE sys_prvilege COMMENT '权限表';
    28. CREATE TABLE sys_user_role(
    29. user_id BIGINT COMMENT '用户 ID ',
    30. role_id BIGINT COMMENT '角色 ID'
    31. );
    32. ALTER TABLE sys_user_role COMMENT '用户角色关联表';
    33. CREATE TABLE sys_role_prvilege(
    34. role_id BIGINT COMMENT '角色ID',
    35. privilege_id BIGINT COMMENT 'ID'
    36. );
    37. ALTER TABLE sys_role_prvilege COMMENT '角色权限关联表';
    38. INSERT INTO sys_user VALUES ('2','admin','123456','admin@mybatis.tk','管理员',NULL,'2016-04-01 17:00:58');
    39. INSERT INTO sys_user VALUES ('1001','test','123456','test@mybatis.tk','测试用户',NULL,'2016-04-01 17:00:58');
    40. INSERT INTO sys_role VALUES ('1','管理员','1','1','2016-04-01 17:02:14');
    41. INSERT INTO sys_role VALUES ('2','普通用户','1','1','2016-04-01 17:02:34');
    42. INSERT INTO sys_user_role VALUES ('1','1');
    43. INSERT INTO sys_user_role VALUES ('1','2');
    44. INSERT INTO sys_user_role VALUES ('3','2');
    45. INSERT INTO sys_prvilege VALUES ('1','用户管理','/users');
    46. INSERT INTO sys_prvilege VALUES ('2','角色管理','/roles');
    47. INSERT INTO sys_prvilege VALUES ('3','系统日志','/logs');
    48. INSERT INTO sys_prvilege VALUES ('4','人员维护','/persons');
    49. INSERT INTO sys_prvilege VALUES ('5','单位维护','/companies');
    50. INSERT INTO sys_role_prvilege VALUES ('1','l');
    51. INSERT INTO sys_role_prvilege VALUES ('1','1001');
    52. INSERT INTO sys_role_prvilege VALUES ('1','2');
    53. INSERT INTO sys_role_prvilege VALUES ('2','4');
    54. INSERT INTO sys_role_prvilege VALUES ('2','5');

    3.创建实体类

    1. package tk.mybatis.simple.model;
    2. import java.util.Date;
    3. import lombok.Data;
    4. @Data
    5. public class SysUser {
    6. private Long id;
    7. private String userName;
    8. private String userPassword;
    9. private String userInfo;
    10. private byte[] headImg;
    11. private Date createTime;
    12. private String userEmail;
    13. }

    @Date可以省略get、set方法,要导入依赖、下载插件才可以使用

    1. <dependency>
    2. <groupId>org.projectlombok</groupId>
    3. <artifactId>lombok</artifactId>
    4. <version>1.18.24</version>
    5. </dependency>

    1. package tk.mybatis.simple.model;
    2. import lombok.Data;
    3. @Data
    4. public class SysUserRole {
    5. private Long userId;
    6. private Long roleId;
    7. }

    4.Mapper

    创建一下文件

    xml:

    需要注意 是<mapper >根标签 name space 属性。当 app 接口和 XM 文件关联的时候,命名空间口amespace 值就需要配置成接口的全限定名称,例如 UserMapper 接口对 应的 tk.mybat. simple.mapper.UserMapper内部就是通过这个值将接口和XML 关联起来的。

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="tk.mybatis.simple.mapper.UserMapper">
    6. mapper>

     mybatis-config.xml

    1. <mappers>
    2. <mapper resource="mapper/CountryMapper.xml"/>
    3. <mapper resource="mapper/UserMapper.xml"/>
    4. <mapper resource="mapper/RoleMapper.xml"/>
    5. <mapper resource="mapper/PrivilegeMapper.xml"/>
    6. <mapper resource="mapper/UserRoleMapper.xml"/>
    7. <mapper resource="mapper/RolePrivilegeMapper.xml"/>
    8. </mappers>

    5.UserMapper.xml

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="tk.mybatis.simple.mapper.UserMapper">
    6. <resultMap id="userMap" type="tk.mybatis.simple.model.SysUser">
    7. <id property="id" column="id"/>
    8. <result property="userName" column="user_name"/>
    9. <result property="userPassword" column="user_password"/>
    10. <result property="userEmail" column="user_email"/>
    11. <result property="userInfo" column="user_info"/>
    12. <result property="headImg" column="head_img" jdbcType="BLOB"/>
    13. <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
    14. resultMap>
    15. <select id="selectById" resultMap="userMap">
    16. select * from sys_user where id = #{id}
    17. select>
    18. <select id="selectAll1" resultType="tk.mybatis.simple.model.SysUser" >
    19. select id,
    20. user_name userName,
    21. user_password userPassword,
    22. user_email userEmail,
    23. user_info userInfo ,
    24. head img headImg,
    25. create_time createTime
    26. from sys_user
    27. select>
    28. <select id= "selectAll2" resultType="tk.mybatis.simple.model.SysUser" >
    29. select id, user_name , user_password, user_email , user_info, head_img, create_time from sys_user
    30. select>
    31. mapper>

    6.BaseMapperTest

    1. package tk.mybatis.simple.mapper;
    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.BeforeClass;
    7. import java.io.IOException;
    8. import java.io.Reader;
    9. public class BaseMapperTest {
    10. private static SqlSessionFactory sqlSessionFactory;
    11. @BeforeClass
    12. public static void init () {
    13. try {
    14. Reader reader = Resources.getResourceAsReader ("mybatis-config.xml");
    15. sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    16. reader.close();
    17. } catch (IOException ignore) {
    18. ignore.printStackTrace();
    19. }
    20. }
    21. public SqlSession getSqlSession () {
    22. return sqlSessionFactory.openSession();
    23. }
    24. }

    7.CountryMapperTest

    1. package tk.mybatis.simple.mapper;
    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.Assert;
    7. import org.junit.BeforeClass;
    8. import org.junit.Test;
    9. import tk.mybatis.simple.model.Country;
    10. import tk.mybatis.simple.model.SysUser;
    11. import java.io.IOException;
    12. import java.io.Reader;
    13. import java.util.List;
    14. public class CountryMapperTest extends BaseMapperTest {
    15. private static SqlSessionFactory sqlSessionFactory;
    16. // @BeforeClass
    17. // public static void init() {
    18. // try {
    19. 通过 Resources 工具类将 ti -config.xm 配置文件读入 Reader
    20. // Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
    21. 再通过 SqlSessionFactoryBuilder 建造类使用 Reader 创建 SqlSessionFactory工厂对象。
    22. 在创建 SqlSessionFactory 对象的过程中
    23. 首先解 mybatis-config.xml 配置文件,读取配置文件中的 mappers 配置后会读取全部的 Mapper xml 进行具体方法的解析,
    24. 在这些解析完成后, SqlSessionFactory 就包含了所有的属性配置和执行 SQL 的信息。
    25. // sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    26. 使用时通过 SqlSessionFactory 工厂对象获取 splSession
    27. // reader.close();
    28. // } catch (IOException ignore) {
    29. // ignore.printStackTrace();
    30. // }
    31. // }
    32. //
    33. // private void printCountryList(List<Country> countryList) {
    34. // for (Country country : countryList) {
    35. // System.out.printf("%-4d%4s%4s\n", country.getId(), country.getCountryname(), country.getCountrycode());
    36. // }
    37. // }
    38. @Test
    39. public void testSelectByid() {
    40. SqlSession sqlSession = getSqlSession();
    41. try {
    42. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    43. SysUser user = userMapper.selectById((long) 1);
    44. Assert.assertNotNull(user);
    45. Assert.assertEquals("admin", user.getUserName());
    46. } finally {
    47. sqlSession.close();
    48. }
    49. }
    50. @Test
    51. public void testSelectAll() {
    52. SqlSession sqlSession = getSqlSession();
    53. try {
    54. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    55. List<SysUser> userList = userMapper.selectAll();
    56. Assert.assertNotNull(userList);
    57. Assert.assertTrue(userList.size() > 0);
    58. } finally {
    59. sqlSession.close();
    60. }
    61. }
    62. }

    8.运行结果

    9.总结

    (1)mapper接口存放在java下的mapper包里,mapper.xml存放在资源包下面!

    namespace的值是对应的mapper接口的全限定名称

     

    (2)实体类用驼峰命名法,sql 里的映射

    1.用别名法映射

    2.自动映射

    配置:

     3.使用 resultMap

     

     

  • 相关阅读:
    傻白入门芯片设计,芯片键合(Die Bonding)(四)
    直播高配服务器怎么挑选
    vue教程
    【机器学习】集成学习(实战)
    通讯网关软件004——利用CommGate X2Mbt实现Modbus TCP访问Mysql服务器
    vue transition 标签
    实战使用Airtest与mitmdump爬取app数据
    tomcat使用不同jdk的解决方法
    【LeetCode】【前K个高频单词】
    【精讲】Es6 导入 import, 导出 export等多种操作
  • 原文地址:https://blog.csdn.net/H215919719/article/details/128116674