mybatis之动态代理
mybatis的动态代理需要写相关的mapper接口(Dao),它有如下的规则:
1、Mapper.xml文件中的namespace与mapper接口的全类名相同。
2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同。
3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同。
4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同。
是什么意思呢?先看第一条,代码如下,先创建一个mapper的dao接口。
package com.dao;
import java.util.List;
import com.pojo.QueryVo;
import com.pojo.User;
public interface UserDao {
}
然后创建mapper.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">
<mapper namespace="com.dao.UserDao">
</mapper>
可以看到namespace的类如就是指的是创建的Maper的dao接口。
再看第二条,先看如下代码代码。
先看dao接口
package com.dao;
import java.util.List;
import com.pojo.QueryVo;
import com.pojo.User;
public interface UserDao {
public int findUser(User user);
}
再看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.dao.UserDao">
<insert id="findUser" parameterType="com.pojo.User" >
insert into user(id,username,sex,birthday,address) values(#{id},#{username},#{sex},#{birthday},#{address})
</insert>
</mapper>
可以看到<insert/> biao标签中的id 属性的内容和dao中的方法名称相同。
再看第三条,同样的上面的代码。dao中的输入参数是User类型,mapper.xml中的输入参数也是User 类型。
再看第四条。代码如下
package com.dao;
import java.util.List;
import com.pojo.QueryVo;
import com.pojo.User;
public interface UserDao {
public List<User> findUserByIdsa(List<Integer> integers) ;
}
<?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.dao.UserDao">
<sql id="selectUserAll">
select * from user
</sql>
<select id="findUserByIdsa" resultType="User">
<include refid="selectUserAll"></include>
<where>
id in
<foreach collection="list" open="(" close=")" item="id" separator=",">
#{id}
</foreach>
</where>
</select>
</mapper>
可以看到mapper.xml中的返回类型是User ,dao中接受的为LIst的User 类型。
下面是测试代码。
public void One() throws IOException{
String resource = "mybatis.comfiguration.xml" ;
InputStream in = Resources.getResourceAsStream(resource);
SqlSessionFactory builder = new SqlSessionFactoryBuilder().build(in);
SqlSession session = builder.openSession();
User user = new User();
user.setId(3);
user.setBirthday(new Date());
user.setSex("男");
user.setUsername("刘");
user.setAddress("伤害");
session.getMapper(UserDao.class).findUser(user);
session.commit();
session.close();
}
这是insert 的代码
public void Arraylist() throws IOException{
String resource = "mybatis.comfiguration.xml" ;
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
List<Integer> integers = new ArrayList<Integer>();
integers.add(1) ;
integers.add(2) ;
integers.add(3) ;
List<User> user = session.getMapper(UserDao.class).findUserByIdsa(integers);
for (User user2 : user) {
System.out.println(user2);
}
}
这是select的代码