MyBatis入门之接口绑定与CRUD实例

       前一篇博客写了MyBatis入门之HelloWorld,介绍了如何配置mybatis及使用。这一篇博客,将在上一篇学习的基础之上,学习如何使用接口绑定Mapper映射文件。毕竟,接口在开发中是比较常用的。项目代码,我会放到GitHub中,该项目的GitHub地址:https://github.com/qiuxinfa/mybatis-study。先看下目录结构:

 

1.创建maven工程,添加mybatis和mysql驱动依赖:

    <dependencies>
        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!-- mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
    </dependencies>

2.创建实体类:User

public class User {
    private String id;
    private String username;
    private String password;
    private Integer isValid;
    //省略setter和getter以及toString方法
}

3.创建用户表:t_user

-- ----------------------------
-- Table structure for `t_user`
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` varchar(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键id',
  `username` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用户名',
  `password` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '密码',
  `is_valid` int(1) DEFAULT NULL COMMENT '用户是否有效,0无效,1有效',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户信息表';
 
-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES ('123', '张三', '123456', '1');
INSERT INTO `t_user` VALUES ('456', '李四', '123456', '0');

4.创建接口:UserMapper.java

public interface UserMapper {
    //根据id查询
    User getUserById(String id);
    //新增用户
    int addUser(User user);
    //修改用户
    int updateUser(User user);
    //删除用户
    int deleteUserById(String id);
}

5.在resources下创建UserMapper.xml文件,详细的说明写在了代码中:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 因为要接口绑定,所以是接口的全限定类名-->
<mapper namespace="com.qxf.mapper.UserMapper">
    <!--id 与接口的方法名相同-->
    <select id="getUserById" parameterType="string" resultType="com.qxf.pojo.User">
        select id,username,password,is_valid as isValid from t_user where id=#{id}
    </select>
    <!--id 与接口的方法名相同  insert不需要指定返回值,默认返回int,表示影响的行数-->
    <insert id="addUser" parameterType="com.qxf.pojo.User">
        INSERT INTO t_user(id,username,password,is_valid) VALUES(#{id},#{username},#{password},#{isValid})
    </insert>
    <!--id 与接口的方法名相同  update也不需要指定返回值,默认返回int,表示影响的行数-->
    <update id="updateUser" parameterType="com.qxf.pojo.User">
        UPDATE t_user SET username=#{username},password=#{password}
            <if test="isValid != null">
                ,is_valid=#{isValid}
            </if>
         WHERE id=#{id}
    </update>
    <!--id 与接口的方法名相同  delete也不需要指定返回值,默认返回int,表示影响的行数-->
    <delete id="deleteUserById" parameterType="string">
        DELETE FROM t_user WHERE id=#{id}
    </delete>
</mapper>

6.在resources下创建mybatis配置文件: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>
   <!-- 为了打印sql语句 -->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <!--  &amp; 代表特殊符号 &  -->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis_test?serverTimezone=UTC&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="19930919"/>
            </dataSource>
        </environment>
    </environments>
   <!-- 加载mapper.xml的sql映射文件 -->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

       与前一篇博客:MyBatis入门之HelloWorld相比,不同的地方有:

 (1)多了一个叫UserMapper.java的接口,里面有4个方法

(2)UserMapper.xml中的namespace以及<select>等标签的id不能随便定义了,要和接口相对应,具体表现为:

 a.  namespace是接口的全限定类名,不能是其他,不然无法找到对应的接口

 b.  <select>等标签的id要和接口的方法名对应

(3)mybatis-config.xml文件中,在<configuration>节点下,多了一个配置,主要是为了打印执行的sql语句:

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

7.创建测试类:BindInterfaceDemo.java

(1)测试查询

public class BindInterfaceDemo {
    public static void main(String[] args) throws IOException{
        //读取配置信息
        InputStream  inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        //根据配置信息,创建SqlSession工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        //SqlSession工厂创建SqlSession
        SqlSession sqlSession = factory.openSession();
        //获取接口的代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //执行相应的接口方法
        //查找
        User user = mapper.getUserById("123");
        System.out.println(user);

        //关闭连接
        sqlSession.close();
    }
}

看下控制台的输出结果:

可以看到,正确的查出了想要的结果,与上一篇博客不同的是:

a)  这里没有使用sqlSession.selectOne()方法查询,而是使用sqlSession.getMapper()方法,获得接口的代理,进而调用接口的方法getUserById():

        //获取接口的代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //执行相应的接口方法
        //查找
        User user = mapper.getUserById("123");

b) 好处也是很明显的,不用强制类型转换,直接调用接口方法,简单且不容易出错

(2)测试更新操作,包括新增、修改和删除,这里就不一个个演示了,直接上代码:

        //新增
        User u = new User();
        u.setId(UUID.randomUUID().toString().replace("-",""));
        u.setUsername("王五");
        u.setPassword("123456");
        u.setIsValid(1);
        int cnt = mapper.addUser(u);

        //修改
        User u2 = new User();
        u2.setId("123");
        u2.setUsername("张三2");
        u2.setPassword("654321");
        u2.setIsValid(0);
        mapper.updateUser(u2);

        //删除
        mapper.deleteUserById("123");

        //增删改,一定要提交事务,不然不起作用
        sqlSession.commit();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值