初学Mybatis Part 2 创建dao接口、Mybatis主配置文件、创建映射配置文件

余生长醉 提交于 2020-02-08 02:22:55

初学Mybatis Part 2 创建dao接口、Mybatis主配置文件、创建映射配置文件

接续Part1

我们已经创建maven工程并导入坐标
接下来

一、创建实体类和dao的接口

1.创建的实体类

public class User implements Serializable{

    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

2.Serializable说明

一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才是可序列化的。
 因此如果要序列化某些类的对象,这些类就必须实现Serializable接口。
 而实际上,Serializable是一个空接口,没有什么具体内容,
 它的目的只是简单的标识一个类的对象可以被序列化。

3.创建dao接口

和一般的接口创建一样
举例写了几个方法

public interface IUserDao {

    List<User> findAll();

    void saveUser(User user);

    void updateUser(User user);
    
    void deleteUser(Integer userId);

二、Mybatis主配置文件

放在resource包下命名为SqlMapConfig.xml

1.Mybatis配置文件的约束

<?xml version="1.0" encoding="UTF-8"?>
<!--有申明有约束 copy的网上的mybatis配置文件的约束-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

2.Mybatis主配置

<!-- mybatis的主配置文件 -->
<configuration>
    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- default用于起一个选择的默认值 无论用什么下面都得有定义-->
        <!--要让environment起作用下面都得配置 自动弹出来的-->
        <!-- 配置mysql的环境-->
        <environment id="mysql">
            <!-- 配置事务的类型 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) 有三个类型 -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

同时需要写映射配置文件的位置,我弄在resources包下面的

    <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
        <mapper resource="com/bruce/dao/IUserDao.xml"/>
    </mappers>
</configuration>

3.映射配置文件

即上述创建的IUserDao.xml文件进行约束和配置
其实就是Mapper的约束啦

<?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.bruce.dao.IUserDao">

先强调下
mybatis的映射配置文件位置必须和dao接口包结构相同
就是比如说我的接口在java->com->bruce->dao->IUserDao.
那么你的映射配置文件也得在resources->com->bruce->dao->IUserDao.xml

加了约束后接着写方法
增删改查

    <!-- 配置查询所有 -->
    <select id="findAll" resultType="com.bruce.domain.User">
    <!-- id(方法的名称)不能随便写名称 要写IUserDao.java里面的那个方法名称-->
    select * from user;
    --     如果不写resultType的话报错原因是不知道表和实体类封装到哪里去 不知道返回类型
    --     select 执行完了实现封装的时候会把结果集封装到User对象里面并把这些User对象添加到一个list
    </select>
    
    <!-- 保存用户 -->
    <insert id="saveUser" parameterType="com.bruce.domain.User">
        <!-- parameterType参数类型 -->
        <!-- 配置插入操作后,获取插入数据的id -->
        <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
            <!-- keyProperty id的属性名称 对应实体类 keyColumn id的列名 对应表的
                 resultType 结果集类型 order什么时候执行获取id的操作-->
            select last_insert_id();
        </selectKey>
        insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});
    </insert>

    <!-- 更新用户 -->
    <update id="updateUser" parameterType="com.bruce.domain.User">
        update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id =#{id};
    <!-- update的sql语句 -->
    </update>

    <!-- 删除用户 -->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id = #{uid}
        <!--这个占位符可以随便取名字-->
    </delete>

环境搭建的注意事项:

1.貌似SqlMapConfig得直接放在resources下(这一点我不确定)

2. 创建IUserDao.xml和IUserDao.java时名称是为了和我们之前的知识保持一致。
在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper
所以:IUserDao 和 IUserMapper是一样的

3.在IDEA中创建目录的时候,它和包是不一样的
包在创建时:com.bruce.dao它时三级结构
目录在创建时:com.bruce.dao它是一级目录
所以最好是一个一个创建文件夹

4.mybatis的映射配置文件位置必须和dao接口包结构相同

5.映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名

6.映射配置文件的操作配置(比如写的那个select),id属性的取值必须是dao接口的方法名(取的findAll)

**3.4.5点都遵从了之后,我们在开发中就无须再写dao的实现类 写完接口我们的操作就结束了 剩下的功能mybatis给我们实现

至于为什么要这样硬要求,在入门案例中可以体现好处,开发效率大大提升
下一Part写入门案例

坚持就是胜利奥利给

(点个赞吧求求了)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!