前言
一般实现接口都是自己编写实现类
public interface MyDao{
public void save();
}
//编写实现类文件
public class MyDaoClass implements MyDao{
public void save(){
System.out.println("Hello");
}
}
还可以通过动态代理,在程序运行时的内存中帮你生成实现类。
如**getMapper()**方法就能帮我们生成实现类。
一、准备
1、编写持久层接口:UserDao接口
src\main\java\cn\cyl\dao\UserDao.java
public interface UserDao {
}
2、编写持久层接口的映射配置:UserDao.xml
src\main\resources\cn\cyl\dao\UserDao.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--mapper的约束文件-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace要求写接口的全类名:包名+类名=全类名-->
<mapper namespace="cn.cyl.dao.UserDao">
</mapper>
3、在核心配置文件SqlMapConfg.xml文件配置该映射
src\main\resources\SqlMapConfig.xml
<!--配置多个映射文件,告知mybatis映射配置的位置-->
<mappers>
<mapper resource="UserMapper.xml"/>
<mapper resource="cn/cyl/dao/UserDao.xml"/>
</mappers>
4、User实体类、user表
src\main\java\cn\cyl\bean\User.java
public class User {
private int id;
private String username;
private Date birthday;
private int sex;
private String address;
//省略get set toString方法
}
注意:
- 持久层接口和持久层接口的映射配置必须在相同的包下
- 持久层映射配置中 mapper 标签的 namespace 属性取值必须是持久层接口的全限定类。
- SQL 语句的配置标签< select>,< insert>,< delete>,< update>的 id 属性必须和持久层接口的方法名相同。
二、根据id查询
1、UserDao接口中添加方法
public interface UserDao {
User findById(int i);
}
2、UserDao.xml映射文件配置< select>标签
<mapper namespace="cn.cyl.dao.UserDao">
<!--使用代理以后,id必须是方法名-->
<select id="findById" parameterType="int" resultType="cn.cyl.bean.User">
select * from user where id = #{id};
</select>
</mapper>
3、加入查询的测试方法
@Test
public void selectTest01(){
//创建SqlSession对象
SqlSession sqlSession = MySessionUtils.getSession();
//getMapper()方法:对你编写的接口使用动态代理技术实现,直接返回实现类对象,即代理对象
//代理对象的方法内部就是查询sql,并且执行jdbc代码
//参数:class<T> aClass
UserDao dao = sqlSession.getMapper(UserDao.class);
//定义变量接收
User user = dao.findById(1);
//打印结果
System.out.println(user);
//释放资源
sqlSession.close();
}
4、控制台输出
三、根据用户名模糊查询
1、UserDao接口中添加方法
List<User> findByKeyword(String s);
2、UserDao.xml映射文件配置< select>标签
<select id="findByKeyword" parameterType="string" resultType="User">
select * from user where username like #{keyword}
</select>
3、加入查询的测试方法
@Test
public void selectTest02(){
//创建SqlSession对象
SqlSession sqlSession = MySessionUtils.getSession();
//返回接口的实现类对象
UserDao dao = sqlSession.getMapper(UserDao.class);
//搜索姓张的人
List<User> list = dao.findByKeyword("张%");
for (User user:list){
System.out.println(user);
}
sqlSession.close();
}
4、控制台输出
四、保存用户
1、UserDao接口中添加方法
void saveUser(User user);
2、UserDao.xml映射文件配置< insert>标签
<insert id="saveUser" parameterType="user">
insert into user values(null,#{username},#{birthday},#{sex},#{address})
</insert>
3、加入插入的测试方法
@Test
public void insertTest04(){
//创建SqlSession对象
SqlSession sqlSession = MySessionUtils.getSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
//定义接口
User user = new User();
// user.setId(101);
user.setUsername("jack");
user.setAddress("北京");
user.setBirthday(new Date());
//执行存储方法
dao.saveUser(user);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
4、控制台输出
五、根据id删除用户
1、UserDao接口中添加方法
void deleteById(int i);
2、UserDao.xml映射文件配置< delete>标签
<delete id="deleteById" parameterType="int">
delete from user where id = #{id}
</delete>
3、加入删除的测试方法
@Test
public void deleteTest03(){
//创建SqlSession对象
SqlSession sqlSession = MySessionUtils.getSession();
//返回接口的实现类对象
UserDao dao = sqlSession.getMapper(UserDao.class);
//删除id为104的用户
dao.deleteById(104);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
4、控制台输出