Mybatis 开发 DAO 之 Mapper 动态代理

使用 Maven 搭建 Mybatis 环境:https://blog.csdn.net/qq_42322548/article/details/89913220

一、创建项目

创建一个 Maven 项目。

1、添加 jar 包依赖。

<dependencies>
    <!--mybatis核心包-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.1</version>
    </dependency>
    <!--mysql驱动包-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.13</version>
    </dependency>
    <!--junit测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.8</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

2、设置资源文件路径,使 Maven 能编译 resource 文件夹之外的资源文件。

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

3、目录结构。

二、创建实体类

这里使用了 Lombok:https://blog.csdn.net/qq_42322548/article/details/91438451

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String account;
    private String password;
    private String name;
    private int phone;
}

三、添加 JDBC 配置文件

在 resource 文件夹新建 jdbc.properties 配置文件,保存配置相关的信息。

# mysql驱动包名
driver=com.mysql.cj.jdbc.Driver
# 数据库连接地址
url=jdbc:mysql://localhost:3306/demo_1? serverTimezone=GMT &useUnicode=true& characterEncoding=utf8
# 用户名
username=root
# 密码
password=root

四、添加配置 Mybatis

在 resource 文件夹新建 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>
    <!-- 引用 jdbc.properties 配置文件 -->
    <properties resource="jdbc.properties"></properties>
    <!-- typeAliases 导入实体类包 -->
    <typeAliases>
        <package name="com.noteligible.pojo"/>
    </typeAliases>
    <!-- environments 环境配置 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 数据库连接池 -->
            <!-- 数据库连接相关配置 ,这里动态获取jdbc.properties文件中的内容-->
            <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>
    <!-- 加载 mapper 映射文件 -->
    <mappers>
        <package name="com.noteligible.mapper"></package>
    </mappers>
</configuration>

五、创建 sql 映射文件

在 mapper 文件夹新建 UserMapper.xml 文件,并在 Configuration.xml 文件中加载该文件。

编写 mapper.xml(映射文件)和 mapper.java 需要遵循一个开发规范:

  • mapper.xml中namespace就是mapper.java的类全路径。
  • mapper.xml中statement的id和mapper.java中方法名一致。
  • mapper.xml中statement的parameterType指定输入参数的类型和mapper.java的方法输入参数类型一致
  • mapper.xml中statement的resultType指定输出结果的类型和mapper.java的方法返回值类型一致。
<?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">
<mapper namespace="com.noteligible.mapper.UserMapper">
    <!--增-->
    <insert id="insertUser" parameterType="User">
        insert into users values (#{id}, #{account}, #{password}, #{name},  #{phone})
    </insert>
    <!--删-->
    <delete id="deleteUser" parameterType="User">
        delete from users where id = #{id}
    </delete>
    <!--改-->
    <update id="updateUser" parameterType="User">
        update users set account = #{account}, password = #{password}, name = #{name},  phone = #{phone} where id = #{id}
    </update>
    <!--通过id查找-->
    <select id="queryUserById" parameterType="User" resultType="User">
        select * from users where id = #{id}
    </select>
    <!--通过名字模糊查找-->
    <select id="queryUserByName" parameterType="String" resultType="User">
        select * from users where name like "%"#{value}"%"
    </select>
</mapper>

六、创建 UserMapper 接口

在 mapper 文件夹新建 UserMapper 接口,并将 sql 映射文件中的 namespace 改成 UserMapper 接口的地址。

public interface UserMapper {
    /**
     * 增
     * @param user
     */
    void insertUser(User user);
    /**
     * 删
     * @param user
     */
    void deleteUser(User user);
    /**
     * 改
     * @param user
     */
    void updateUser(User user);
    /**
     * 通过id查找
     * @param user
     * @return
     */
    User queryUserById(User user);
    /**
     * 通过名字模糊查找
     * @param name
     * @return
     */
    List<User> queryUserByName(String name);
}

七、编写测试类

在 test 文件夹 新建 junit 测试类。

public class test {
    private SqlSessionFactory sqlSessionFactory = null;
    @Before
    public void init() throws Exception{
        // 创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        // 加载mybaits-config.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybaits-config.xml");
        // 创建SqlsessionFactory
        this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    }
    @Test
    public void testInsert(){
        // 获取sqlSession,和spring整合后由spring管理
        SqlSession sqlSession = this.sqlSessionFactory.openSession();
        // 从sqlSession中获取Mapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = new User(1, "123", "abc", "张三", 110);
        userMapper.insertUser(user);
        // 和spring整合后由spring管理
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void testDelete(){
        SqlSession sqlSession = this.sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.deleteUser(1);
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void testQueryUserById(){
        SqlSession sqlSession = this.sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
        user.setId(1);
        User userResult = userMapper.queryUserById(user);
        System.out.println(userResult);
    }

    @Test
    public void testQueryUserByName(){
        SqlSession sqlSession = this.sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userMapper.queryUserByName("张");
        System.out.println(userList);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值