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

全部评论

相关推荐

就前几天旅游的时候,打开抖音就经常刷到这类视频:以前是高学历学生、老师、主持人,现在做着团播、擦边主播的工作,以及那些经过精心包装的“职业转型”故事——从铺天盖地的VLOG到所谓的“04年夜场工作日记”,这些内容在初中升学、高考放榜等关键时间节点持续发酵。可以说非常直接且精准地在潜移默化地影响着心智尚未成熟的青少年,使其对特殊行业逐渐脱敏。那我就想问了:某些传播公司、平台运营者甚至某些夜场的老板,你们究竟在传递怎样的价值观?点开那些视频,评论区里也是呈现明显的两极分化:一种是​​经济下行论​​:“现在就业市场已经艰难到这种程度了吗?”​​一种是事实反驳派​​:这些创作者往往拥有名校背景,从事着...
牛客刘北:被环境教育的,为了能拿到足够的钱养活自己,不甘心也得甘心,现在的短视频传播的思想的确很扭曲,但是很明显,互联网玩上一年你就能全款提A6,但你全心全意不吃不喝工作一年未必能提A6,但是在高考中考出现这个的确很扭曲,在向大家传播“不上学,玩互联网也可以轻松年入百万”,不是人变了,是社会在变
预测一下26届秋招形势
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
06-11 17:39
门头沟学院 Java
小呆呆的大鼻涕:卧槽,用户彻底怒了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务