初学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写入门案例
坚持就是胜利奥利给
(点个赞吧求求了)
来源:CSDN
作者:韦恩少爷的背
链接:https://blog.csdn.net/weixin_42727032/article/details/104214473