Mybatis CRUD

1 准备数据库数据

首先,我们需要准备一张名为 user 的表。该表包含字段 id(主键)、username、password。创建SQL如下:

   CREATE TABLE `user` (
     `id` INT(11) NOT NULL AUTO_INCREMENT,
     `username` VARCHAR(50) NOT NULL,
     `password` VARCHAR(50) NOT NULL,
     PRIMARY KEY (`id`)
   ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2 实体类准备

接下来,我们需要定义一个实体类 User,来对应 user 表的一行数据。

   @Data //lombok
   public class User {
     private Integer id;
     private String username;
     private String password;
   }

3 Mapper接口定义

定义一个 Mapper 接口 UserMapper,并在其中添加 user 表的增、删、改、查方法。

   public interface UserMapper {
     
     int insert(User user);
   
     int update(User user);
   
     int delete(Integer id);
   
     User selectById(Integer id);
   
     List<User> selectAll();
   }

4 MapperXML编写

在 resources /mappers目录下创建一个名为 UserMapper.xml 的 XML 文件,包含与 Mapper 接口中相同的五个 SQL 语句,并在其中,将查询结果映射到 User 实体中。

   <?xml version="1.0" encoding="UTF-8" ?>
   <!DOCTYPE mapper
           PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
   <!-- namespace等于mapper接口类的全限定名,这样实现对应 -->
   <mapper namespace="com.lx.mapper.UserMapper">
     <!-- 定义一个插入语句,并获取主键值 -->
     <insert id="insert" useGeneratedKeys="true" keyProperty="id">
       INSERT INTO user(username, password)
                   VALUES(#{username}, #{password})
     </insert>
     
     <update id="update">
       UPDATE user SET username=#{username}, password=#{password}
       WHERE id=#{id}
     </update>
     
     <delete id="delete">
       DELETE FROM user WHERE id=#{id}
     </delete>
     <!-- resultType使用user别名,稍后需要配置!-->
     <select id="selectById" resultType="user">
       SELECT id, username, password FROM user WHERE id=#{id}
     </select>
     
     <!-- resultType返回值类型为集合,所以只写范型即可! -->
     <select id="selectAll" resultType="user">
       SELECT id, username, password FROM user
     </select>
     
   </mapper>

6 MyBatis配置文件

位置:resources: mybatis-config.xml

   <?xml version="1.0" encoding="UTF-8" ?>
   <!DOCTYPE configuration
           PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
           "http://mybatis.org/dtd/mybatis-3-config.dtd">
   <configuration>
   
       <settings>
           <!-- 开启驼峰式映射-->
           <setting name="mapUnderscoreToCamelCase" value="true"/>
           <!-- 开启logback日志输出-->
           <setting name="logImpl" value="SLF4J"/>
       </settings>
   
       <typeAliases>
           <!-- 给实体类起别名 -->
           <package name="com.lx.pojo"/>
       </typeAliases>
   
       <!-- environments表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 -->
       <environments default="development">
           <!-- environment表示配置Mybatis的一个具体的环境 -->
           <environment id="development">
               <!-- Mybatis的内置的事务管理器 -->
               <transactionManager type="JDBC"/>
               <!-- 配置数据源 -->
               <dataSource type="POOLED">
                   <!-- 建立数据库连接的具体信息 -->
                   <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                   <property name="url" value="jdbc:mysql://localhost:3306/mybatis-example"/>
                   <property name="username" value="root"/>
                   <property name="password" value="root"/>
               </dataSource>
           </environment>
       </environments>
   
       <mappers>
           <!-- Mapper注册:指定Mybatis映射文件的具体位置 -->
           <!-- mapper标签:配置一个具体的Mapper映射文件 -->
           <!-- resource属性:指定Mapper映射文件的实际存储位置,这里需要使用一个以类路径根目录为基准的相对路径 -->
           <!--Maven工程的目录结构来说,resources目录下的内容会直接放入类路径,所以这里我们可以以resources目录为基准 -->
           <mapper resource="mappers/UserMapper.xml"/>
       </mappers>
   
   </configuration>

7 效果测试

   public class MyBatisTest {
   
       private SqlSession session;
       // junit会在每一个@Test方法前执行@BeforeEach方法
   
       @BeforeEach
       public void init() throws IOException {
           session = new SqlSessionFactoryBuilder()
                   .build(
                           Resources.getResourceAsStream("mybatis-config.xml"))
                   .openSession();
       }
   
       @Test
       public void createTest() {
           User user = new User();
           user.setUsername("admin");
           user.setPassword("123456");
           UserMapper userMapper = session.getMapper(UserMapper.class);
           userMapper.insert(user);
           System.out.println(user);
       }
   
       @Test
       public void updateTest() {
           UserMapper userMapper = session.getMapper(UserMapper.class);
           User user = userMapper.selectById(1);
           user.setUsername("root");
           user.setPassword("111111");
           userMapper.update(user);
           user = userMapper.selectById(1);
           System.out.println(user);
       }
   
       @Test
       public void deleteTest() {
           UserMapper userMapper = session.getMapper(UserMapper.class);
           userMapper.delete(1);
           User user = userMapper.selectById(1);
           System.out.println("user = " + user);
       }
   
       @Test
       public void selectByIdTest() {
           UserMapper userMapper = session.getMapper(UserMapper.class);
           User user = userMapper.selectById(1);
           System.out.println("user = " + user);
       }
   
       @Test
       public void selectAllTest() {
           UserMapper userMapper = session.getMapper(UserMapper.class);
           List<User> userList = userMapper.selectAll();
           System.out.println("userList = " + userList);
       }
   
       // junit会在每一个@Test方法后执行@@AfterEach方法
       @AfterEach
       public void clear() {
           session.commit();
           session.close();
       }
   }

2.5 mapper

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值