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

全部评论

相关推荐

不愿透露姓名的神秘牛友
2024-12-30 18:02
程序员牛肉:1.可以标记一下自己的学校是985,有一些hr可能没想到你这个院校是985的。 2.简历所呈现出来的能力还是有点差的,苍穹外卖+黑马点评。这在java技术域里面也就是刚学三四个月的样子,大厂现在招人少,小厂又更加希望你能直接过来干活。就你简历上呈现出来的能力,确实是有点难找,肉眼可见的不懂技术。 第一个项目中:简单的使用redis也算是亮点嘛?使用jwt,threadlocal也算是亮点?你不就是调了几个包嘛?Nginx作为服务器也能写出来,这不是前端的活嘛? 第二个项目中:分布式锁+mq消息队列+Lua队列。真没啥好问的。属于面试官看一眼就阳痿的简历,没有任何想提问的欲望。 我给你建议是好好的挖一挖这个项目吧,其实苍穹外卖和黑马点评这两个项目很不错了,只不过是太烂大街了导致面试官没啥问的兴趣,所以不太推荐写简历上。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务