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的代码

全部评论

相关推荐

点赞 评论 收藏
分享
斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务