远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)
  • JavaSE

  • 开源框架

    • MyBatis

      • JDBC的问题分析
      • 自定义持久层框架的设计思路
      • 自定义持久层框架的代码实现一
      • 自定义持久层框架的代码实现二
      • 使用getMapper方式对自定义持久层框架进行优化
      • MyBatis的基本介绍及优势
      • MyBatis的基本使用
      • Mybatis基本流程及配置文件解析
      • MyBatis复杂映射开发之一对一查询
      • MyBatis复杂映射开发之一对多查询
      • MyBatis复杂映射开发之多对多查询
      • MyBatis常用注解及基本增删改查的注解实现
        • MyBatis 的常用注解
        • MyBatis 的增删改查
        • 本文代码地址
      • MyBatis的注解实现复杂映射开发
      • MyBatis缓存的概念
      • MyBatis的一级缓存
      • MyBatis的二级缓存
      • MyBatis的二级缓存整合redis
      • MyBatis-RedisCache源码分析
  • Linux

  • Struts2

  • Hibernate

  • Webservice

  • 分布式

  • 分布式框架

  • 后端开发
  • 开源框架
  • MyBatis
terwer
2022-08-30
目录

MyBatis常用注解及基本增删改查的注解实现

# MyBatis 的常用注解

注解可以减少 Mapper 文件的编写,常用注解如下;

@Insert:实现新增

@Update:实现更新

@Delete:实现删除

@Select:实现查询

@Result:实现结果集封装

@Results:可以和@Result 一起使用,封装多个结果集

@One:实现一对一结果集封装

@Many:实现多对多结果集封装

# MyBatis 的增删改查

数据库配置依旧保存不变

jdbc.properties

# 新版驱动名称发生了改变
# jdbc.driver=com.mysql.jdbc.Driver
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false
jdbc.username=terwer
jdbc.password=123456
1
2
3
4
5
6

sqlMapConfig.xml

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 加载外部的 propeties 文件 -->
    <properties resource="jdbc.properties"/>

    <settings>
        <!-- 输出日志 -->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>

    <!-- 为实体的全限定类名取别名 -->
    <typeAliases>
        <!-- 给单独的实体起别名 -->
        <!-- <typeAlias type="com.terwergreen.pojo.User" alias="user"/> -->

        <!-- 批量起别名:改包下所有类本身的类名,不区分大小写 -->
        <package name="com.terwergreen.pojo"/> 
    </typeAliases>

    <!-- environments:运行环境 -->
    <environments default="development">
        <environment id="development">
            <!-- 当前事务交给 JDBC 管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 当前使用 MyBatis 提供的连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
        <environment id="production">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 引入映射配置文件 -->
    <mappers>
        <!--
        <mapper resource="OrderMapper.xml"/>
        -->
        <package name="com.terwergreen.mapper"/>
    </mappers>
</configuration>
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

User

    class User {
        var id: Int? = null
        var username: String? = null
    
        override fun toString(): String {
            return "User{" +
                    "id=" + id +
                    ", username='" + username + '\''
                    '}'
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class User {
        private Integer id;
        private String username;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", username='" + username + '\''
                    '}';
        }
    }
    
    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
    // Make sure to add code blocks to your code group

    UserMapper

      interface UserMapper {
          @Select("select * from user")
          fun findAll(): List<User?>?
      
          @Insert("insert into user(username) values(#{username})")
          fun add(user: User?)
      
          @Update("update user set username=#{username} where id=#{id}")
          fun update(user: User?)
      
          @Delete("delete from user where id=#{id}")
          fun delete(id: Int?)
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      /**
       * 用户映射
       *
       * @name: UserMapper
       * @author: terwer
       * @date: 2022-05-25 13:27
       **/
      public interface UserMapper {
          @Select("select * from user")
          List<User> findAll();
      
          @Insert("insert into user(username) values(#{username})")
          void add(User user);
      
          @Update("update user set username=#{username} where id=#{id}")
          void update(User user);
      
          @Delete("delete from user where id=#{id}")
          void delete(Integer id);
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      // Make sure to add code blocks to your code group

      结果测试

      UserMapper

        class UserMapperTest {
            private var userMapper: UserMapper? = null
            private var sqlSession: SqlSession? = null
            @Before
            @Throws(Exception::class)
            fun before() {
                println("before...")
                val resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml")
                val sqlSessionFactory = SqlSessionFactoryBuilder().build(resourceAsStream)
                sqlSession = sqlSessionFactory.openSession()
                userMapper = sqlSession?.getMapper(UserMapper::class.java)
            }
        
            @Test
            fun testFindAll() {
                val all = userMapper!!.findAll()
                for (user in all) {
                    println(user)
                }
            }
        
            @Test
            @Throws(IOException::class)
            fun add() {
                val user = User()
                user.username = "测试3"
                userMapper!!.add(user)
        
                // 这里一定要加,否则不会提交事务
                sqlSession!!.commit(true)
            }
        
            @Test
            fun update() {
                val user = User()
                user.id = 3
                user.username = "测试11"
                userMapper!!.update(user)
        
                // 这里一定要加,否则不会提交事务
                sqlSession!!.commit(true)
            }
        
            @Test
            fun delete() {
                userMapper!!.delete(3)
        
                // 这里一定要加,否则不会提交事务
                sqlSession!!.commit(true)
            }
        }
        
        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
        public class UserMapperTest {
        
            private UserMapper userMapper;
            private SqlSession sqlSession;
        
            @Before
            public void before() throws Exception {
                System.out.println("before...");
                InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
                sqlSession = sqlSessionFactory.openSession();
                userMapper = sqlSession.getMapper(UserMapper.class);
            }
        
            @Test
            public void testFindAll() {
                List<User> all = userMapper.findAll();
                for (User user : all) {
                    System.out.println(user);
                }
            }
        
            @Test
            public void add() throws IOException {
                User user = new User();
                user.setUsername("测试3");
                userMapper.add(user);
        
                // 这里一定要加,否则不会提交事务
                sqlSession.commit(true);
            }
        
            @Test
            public void update() {
                User user = new User();
                user.setId(3);
                user.setUsername("测试11");
                userMapper.update(user);
        
                // 这里一定要加,否则不会提交事务
                sqlSession.commit(true);
            }
        
            @Test
            public void delete() {
                userMapper.delete(3);
        
                // 这里一定要加,否则不会提交事务
                sqlSession.commit(true);
            }
        }
        
        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
        // Make sure to add code blocks to your code group

        注意:默认不会自动提交事务,可以手动设置SqlSession,也可以在创建SqlSession的时候指定自动提交事务。

        // sqlSession = sqlSessionFactory.openSession();
        // 这样也是可以的,这样的话后面就不用每次都设置了
        sqlSession = sqlSessionFactory.openSession(true);
        
        1
        2
        3

        # 本文代码地址

        mybatis-annotation (opens new window)

        文章更新历史

        2022-08-30 feat:初稿

        编辑 (opens new window)
        #mybatis#annotation#framework#mybatis-13
        上次更新: 2023/02/13, 17:01:26
        MyBatis复杂映射开发之多对多查询
        MyBatis的注解实现复杂映射开发

        ← MyBatis复杂映射开发之多对多查询 MyBatis的注解实现复杂映射开发→

        最近更新
        01
        解决css部分border被圆角切掉之后圆角的边框消失问题
        03-18
        02
        使用TypeScript开发一个自定义的Node-js前端开发脚手架
        03-08
        03
        Github-Actions使用release-please实现自动发版
        03-06
        更多文章>
        Theme by Vdoing | Copyright © 2011-2023 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
        • 跟随系统
        • 浅色模式
        • 深色模式
        • 阅读模式