采用 Mybatis 的代理开发方式实现 dao层的开发,这种方式是我们后面进入企业的主流。
接口代理方式只需要程序员编写dao 接口(后期叫做mapper接口),由Mybatis 框架根据接口定义创建接口的动态代理对象。
需要遵循以下规范:
映射文件中的namespace与dao接口的全类名相同
映射文件中的增删改查标签的id属性与dao接口的方法名相同
映射文件中的增删改查标签的parameterType属性与dao接口中方法的参数类型匹配
映射文件中的增删改查标签的resultType属性与dao接口中方法的返回值类型匹配
创建数据库表
CREATE TABLE `user`(
uid INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(100) NOT NULL,
PASSWORD VARCHAR(50) NOT NULL,
email VARCHAR(50),
birthday DATE
);
INSERT INTO `user` (NAME,PASSWORD,email,birthday) VALUES("尼古拉斯赵四",'123456','nglszs@qq.com','1888-09-02');
INSERT INTO `user` (NAME,PASSWORD,email,birthday) VALUES("尼古拉斯赵五",'123456','nglszw@qq.com','1889-09-03');
INSERT INTO `user` (NAME,PASSWORD,email,birthday) VALUES("尼古拉斯赵六",'123456','nglszl@qq.com','1890-09-04');
INSERT INTO `user` (NAME,PASSWORD,email,birthday) VALUES("尼古拉斯赵七",'123456','nglszq@qq.com','1891-09-05');
创建实体类
package cn.itcast.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer uid;
private String name;
private String password;
private String email;
private String birthday;//数据库中是Date类型,java中可以是Date,也可以是String类型
}
创建Dao接口
package cn.itcast.dao;
import cn.itcast.domain.User;
public interface UserDao {
User findById(Integer id);
}
创建映射文件
<?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的值是UserDao的类全名-->
<mapper namespace="cn.itcast.dao.UserDao">
<!--
id的值和UserDao中的方法名保持一致
parameterType和UserDao中的方法参数类型保持一致
resultType和UserDao的方法返回值类型保持一致,这里用的是别名
-->
<select id="findById" parameterType="int" resultType="user">
select * from `user` where uid= #{uid}
</select>
</mapper>
创建主配置文件
<?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>
<properties resource="jdbc.properties"></properties>
<settings>
<setting name="logImpl" value="log4j"/>
</settings>
<typeAliases>
<!--如果类比较多,可以指定包,通过扫包的方式给包中的所有类起别名-->
<package name="cn.itcast.domain"/>
</typeAliases>
<!--数据源环境-->
<environments default="developement">
<environment id="developement">
<transactionManager type="JDBC"></transactionManager>
<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>
<!--加载映射文件-->
<mappers>
<mapper resource="UserMapper.xml"></mapper>
</mappers>
</configuration>
编写测试类方法
@Test
public void testFindById()throws Exception{
/*1.读取配置文件并创建SqlSessionFactory*/
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
/*2.获取sqlSession[这是mybatis的重要API, 使用它可以操作数据库crud*/
SqlSession sqlSession = sqlSessionFactory.openSession();
/*3.由Mybatis框架创建UserDao的实现类对象,我们称为代理对象*/
UserDao userDao = sqlSession.getMapper(UserDao.class);
/*4.调用接口的方法*/
User u = userDao.findById(1);
/*5.释放资源*/
sqlSession.close();
//测试查询结果
System.out.println(u);
}