动态代理-根据id查询
- (1)接口与类是实现关系
public interface MyDao{
public void save();
}
//编写实现类文件
public class MyDaoClass implements MyDao{
public void save(){
System.out.println("Hello");
//sql
//jdbc
}
}
- (2)动态代理生成实现类
src\main\java\com\wzx\dao\UserDao.java
//com.wzx.dao.UserDao.findById
public interface UserDao {
public User findById(int id);
}
src\main\resources\com\wzx\dao\UserDao.xml
<?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="com.wzx.dao.UserDao">
<!-- 使用代理以后id必须是方法名-->
<select id="findById" parameterType="int" resultType="com.wzx.bean.User">
select * from user where id =#{id};
</select>
</mapper>
src\test\java\com\wzx\pack02\Test01Proxy.java
public class Test01Proxy {
@Test
public void test01(){
SqlSession sqlSession = MySessionUtils.getSession();
//select * from user where id =1;
UserDao dao = sqlSession.getMapper(UserDao.class);//内部就使用你编写接口来生成代理对象
//代理对象的方法内部 查询sql,并且执行jdbc代码
User user = dao.findById(1);
System.out.println(user);
//定义接口
sqlSession.close();
}
}
src\main\resources\SqlMapConfig.xml
<!-- 配置多个映射文件-->
<mappers>
<mapper resource="UserMapper.xml"/>
<mapper resource="com/wzx/dao/UserDao.xml"/>
</mappers>
根据用户名模糊查询
- (1)定义接口中的方法
- (2)语句
- (3)配置
- (4)通过session.getMapper()返回的对象不是实现类对象
@Test
public void test02(){
SqlSession sqlSession = MySessionUtils.getSession();
//返回的是实现接口的实现类对象
UserDao dao = sqlSession.getMapper(UserDao.class);
//搜索名字
List<User>list=dao.findByKeyWord("张%");
System.out.println(list);
//定义接口
sqlSession.close();
}
UserDao .java
//com.wzx.dao.UserDao.findById
public interface UserDao {
public User findById(int id);
//select * from user where username like '张%'
List<User> findByKeyWord(String s);
}
UserDao .xml
<select id="findByKeyWord" parameterType="string" resultType="com.wzx.bean.User">
select * from user where username like #{keyword}
</select>
删除数据
- (1)定义接口中的方法
- (2)语句
- (3)配置
- (4)通过session.getMapper()返回的对象不是实现类对象
@Test
public void test03(){
SqlSession sqlSession = MySessionUtils.getSession();
//返回的是实现接口的实现类对象
UserDao dao = sqlSession.getMapper(UserDao.class);
//删除
dao.deleteById(16);
//
sqlSession.commit();
sqlSession.close();
}
//com.wzx.dao.UserDao.findById
public interface UserDao {
//delete from user where id = 16;
void deleteById(int id);
}
<delete id="deleteById" parameterType="int">
delete from user where id = #{id};
</delete>
插入数据
- (1)定义接口中的方法
- (2)语句
- (3)配置
- (4)通过session.getMapper()返回的对象不是实现类对象
@Test
public void test04(){
SqlSession sqlSession = MySessionUtils.getSession();
//返回的是实现接口的实现类对象
UserDao dao = sqlSession.getMapper(UserDao.class);
User user = new User();
user.setId(100);
user.setUsername("jackjhone");
user.setAddress("北京");
user.setBirthday(new Date());
dao.saveUser(user);
//
sqlSession.commit();
sqlSession.close();
}
//com.wzx.dao.UserDao.findById
public interface UserDao {
//insert into user value(null,#{username},#{birthday},#{sex},#{address})
void saveUser(User user);
}
<insert id="saveUser" parameterType="com.wzx.bean.User">
insert into user value(null,#{username},#{birthday},#{sex},#{address})
</insert>
给类名起别名
src\main\resources\SqlMapConfig.xml
<typeAliases>
<!-- <typeAlias type="com.wzx.bean.User" alias="user"></typeAlias> -->
<package name="com.wzx.bean"/>
</typeAliases>