MyBatis框架②——增,删,改,查

一.编程背景情况:

1.数据库:Mysql数据库

2.数据库表结构:userinfo表    列名:userid(主键),username,sex,birthday

3.Userinfo.java类。代码如下:

package com.xuexue.model.po;

import java.sql.Date;

public class Userinfo {
	private Integer userid;
	private String username;
	private String sex;
	private double sal;
	private Date birthday;
	public Integer getUserid() {
		return userid;
	}
	public void setUserid(Integer userid) {
		this.userid = userid;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public double getSal() {
		return sal;
	}
	public void setSal(double sal) {
		this.sal = sal;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
}

二.代码实例:

1.  单个入参,返回值是一个对象

1.1 定义一个接口UserinfoMapper.java,写一个方法,根据userid查询出某个用户。代码如下:

public interface UserinfoMapper {
	public Userinfo getUserinfoById(int userid);
}

一个表对应一个接口,一个接口对应一个xml文件,写在一个包内,xml文件命名一般与接口名相同

1.2 写一个与UserinfoMapper.java对应的UserinfoMapper.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.xuexue.model.mapp.UserinfoMapper">    
    <!--与UserinfoMapper.java连接 namespace属性的命名:包名.类名不带.java-->
    <!--id="方法名" parameterType="传参的数据类型"  resultType="返回值得数据类型"-->
    <select id="getUserinfoById" parameterType="int" resultType="Userinfo">		
        select * from userinfo where userid=#{userid}    <!-- sql语句 -->
    </select>
</mapper>

注:查询的sql语句,用select标签,修改-->update,删除-->delete

1.3  写一个测试类,测试查询结果。代码如下:

//省略引包代码
public class Test1 {
	public static void main(String[] args) {
		//1.配置文件流,传参是MyBitis的配置文件
		InputStream inputStream=null;
		try {
			inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
			//2.创建session工厂,传参是配置MyBitis的信息
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			SqlSession session = sqlSessionFactory.openSession();
			//3.通过session获得接口的实现类
			UserinfoMapper userinfoMapper = session.getMapper(UserinfoMapper.class);
			//4.调用实现类方法
			Userinfo  u=userinfoMapper.getAllUserinfoById(1);
			System.out.println(u.getUsername());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
			
	}
}

2.  没有入参,返回值是一个集合

2.1  在UserinfoMapper.java的接口中定义一个方法,查询出全部用户。代码如下:

public List<Userinfo> getAllUserinfo();

2.2  在UserinfoMapper.xml中写上对应的配置信息。代码如下:

<select id="getAllUserinfo" resultType="Userinfo">	
 	select * from userinfo<!-- sql语句 -->
</select>
注:没有传参,不用写parameterType属性

2.3  写一个测试类,测试查询结果。代码如下:

public class Test2 {
	public static void main(String[] args) {  
                //1.配置文件流,传参是MyBitis的配置文件
		InputStream inputStream=null;
		try {
			inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
			//2.创建session工厂,传参是配置MyBitis的信息
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			SqlSession session = sqlSessionFactory.openSession();
			//3.通过session获得接口的实现类
			UserinfoMapper userinfoMapper = session.getMapper(UserinfoMapper.class);
			//4.调用实现类方法
                            //声明一个list集合,调用对应方法,获得一个Userinfo类型的list集合
			List<Userinfo>  list=userinfoMapper.getAllUserinfo();
                            //遍历集合
			for(Userinfo  u:list){
				System.out.println(u.getSal());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}
}

3.模糊查询

3.1在UserinfoMapper.java的接口中定义一个方法,按照名字模糊查询出用户。代码如下:

public Userinfo getAllUserinfoByName(String username);
3.2在UserinfoMapper.xml中写上对应的配置信息。代码如下:
<select id="getAllUserinfoByName" parameterType="string" resultType="Userinfo">		
 	select * from userinfo where username like "%"#{username}"%"
</select>

注:注意模糊查询的sql语句的写法:"%"#{username}"%"

3.3写一个测试类,测试查询结果。代码如下:

//仅列出测试的代码
Userinfo  u=userinfoMapper.getAllUserinfoByName("lixue");
System.out.println(u.getSal());

4.多个参数

4.1在UserinfoMapper.java的接口中定义一个方法,按照username和sex查找用户。代码如下:

public Userinfo getAllUserByCondition(String username,String sex);

4.2在UserinfoMapper.xml中写上对应的配置信息。代码如下:

<!-- ###多参数,不写 parameterType,用0,1代表是方法中的第几个参数-->
<select id="getAllUserByCondition"  resultType="Userinfo">	
    select * from userinfo  where username=#{0} and sex=#{1}
</select>

4.3写一个测试类,测试查询结果。代码如下:

Userinfo  u=userinfoMapper.getAllUserByCondition("lixue","w");
System.out.println(u.getSal());

5.传参是Map

5.1在UserinfoMapper.java的接口中定义一个方法,查询所有用户。代码如下:

public Userinfo getAllUserByCondition2(Map m);

5.2在UserinfoMapper.xml中写上对应的配置信息。代码如下:

<!--入参是map-->
<select id="getAllUserByCondition2" parameterType="map" resultType="Userinfo">		
    select * from userinfo  where username=#{username} and sex=#{sex}<!-- sql语句 -->
</select>
注:#{username}中的username是map中的key的名字

5.3写一个测试类,测试查询结果。代码如下:

Map m= new HashMap();
m.put("username", "lixue");
m.put("sex", "w");
Userinfo  u=userinfoMapper.getAllUserByCondition2(m);
System.out.println(u.getSal());

6.入参是对象

6.1在UserinfoMapper.java的接口中定义一个方法,查询所有用户。代码如下:

public Userinfo getAllUserByCondition3(Userinfo u);

6.2在UserinfoMapper.xml中写上对应的配置信息。代码如下:

<!-- 入参是对象 -->
<select id="getAllUserByCondition3" parameterType="Userinfo" resultType="Userinfo">		
 	select * from userinfo  where username=#{username} and sex=#{sex}
</select>

6.3写一个测试类,测试查询结果。代码如下:

Userinfo userinfo=new Userinfo();
userinfo.setUsername("lixue");
userinfo.setSex("w");
Userinfo  u=userinfoMapper.getAllUserByCondition3(userinfo);
System.out.println(u.getSal());

7.添加用户

7.1在UserinfoMapper.java的接口中定义一个方法,添加用户。代码如下:

public void addUser(Userinfo u);

7.2在UserinfoMapper.xml中写上对应的配置信息。代码如下:

<insert id="addUser" parameterType="Userinfo">
 	insert into userinfo values(null,#{username},#{sex},#{sal},#{birthday})
 	<!-- selectKey可以返回刚刚插入的数据的递增序列值keyProperty="id" 返回到Userinfo中的那个属性中  order有两个值,after,before,在插入语句的前面,或者是后面执行-->
 	<selectKey keyProperty="userid" order="AFTER" resultType="int">
 		select LAST_INSERT_ID()
 	</selectKey>
</insert>

7.3写一个测试类,测试查询结果。代码如下:

public class test8 {
    @SuppressWarnings("null")
    public static void main(String[] args) {
	//1.创建一个sqlsessionfactory(用来创建数据库连接的)
	InputStream inputStream=null;
	SqlSession session = null;
	try {
	    inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
		//2.用过工程创建数据库连接
	    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	    session = sqlSessionFactory.openSession();
	    //3.通过session获得接口的实现类,
	    UserinfoMapper userinfoMapper = session.getMapper(UserinfoMapper.class);
	    //4.调用实现类方法
	    Userinfo  u= new Userinfo();
	    u.setUsername("xuemei");
	    u.setSal(10000);
	    u.setSex("m");
	    u.setBirthday(Date.valueOf("1995-12-12"));
					
	    userinfoMapper.addUser(u);
	    System.out.println(u.getUserid());
	    session.commit();
	} catch (IOException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	    session.rollback();
	}			
    }
}
注:手动提交,写上commit。rollback方法

8.修改用户信息

8.1在UserinfoMapper.java的接口中定义一个方法,修改用户。代码如下:

public void updateUser(Userinfo u);

8.2在UserinfoMapper.xml中写上对应的配置信息。代码如下:

<update id="updateUser" parameterType="Userinfo">
 	update userinfo set username=#{username},sal=#{sal} where userid=#{userid}
</update>

8.3写一个测试类,测试查询结果。代码如下:

Userinfo u=new Userinfo();
u.setUsername("amei");
u.setSal(50000);
u.setUserid(2);
					
userinfoMapper.updateUser(u);
//同样需要提交和回滚方法,与添加用户一样,此处略去

9.删除用户

9.1在UserinfoMapper.java的接口中定义一个方法,删除用户。代码如下:

public void deleteUser(Userinfo u);

9.2在UserinfoMapper.xml中写上对应的配置信息。代码如下:

<delete id="deleteUser" parameterType="int">
 	delete from userinfo where userid=#{userid}
</delete>

9.3写一个测试类,测试查询结果。代码如下:

Userinfo u=new Userinfo();
u.setUserid(2);
			
userinfoMapper.deleteUser(u);
//同样需要提交和回滚方法,与添加用户一样,此处略去

10.条件查询,动态拼接

10.1 在UserinfoMapper.java的接口中定义一个方法,查询用户。代码如下:

public List<Userinfo> getAllUserByCondition4(Userinfo u);

10.2 在UserinfoMapper.xml中写上对应的配置信息。代码如下:

<select id="getAllUserByCondition4" parameterType="Userinfo" resultType="Userinfo">		
 	select * from userinfo
 	<where>
 		<if test="userid!=null and userid!=''">
 			and userid=#{userid}
 		</if>
 		<if test="username!='' and username!=null">
 			and username=#{username}
 		</if>
 		<if test="sex!='' and sex!=null">
 			nd sex=#{sex}
 		</if>
 		<if test="sal!=null and sal!=''">
 			and sal=#{sal}
 		</if>
 		<if test="birthday!='' and birthday!=null">
 			and birthday=#{birthday}
 		</if>
 	</where>
</select>
注:在写拼接条件的时候不用加“,”MyBitis框架会自动添加

10.3 写一个测试类,测试查询结果。代码如下:

Userinfo u= new Userinfo();
u.setUserid(1);
					
List<Userinfo> list=userinfoMapper.getAllUserByCondition4(u);
for(Userinfo  user:list){
	System.out.println(user.getSal());
}

11.条件查询,动态拼接

11.1在UserinfoMapper.java的接口中定义一个方法,修改用户。代码如下:

public void updateUser2(Userinfo u);

11.2在UserinfoMapper.xml中写上对应的配置信息。代码如下:

<update id="updateUser2" parameterType="Userinfo">
 	update userinfo
 	<set>
 		<if test="username!=null and username!=''">
 			username=#{username},
 		</if>
 		<if test="sex!=null and sex!=''">
 			sex=#{sex},
 		</if>
 		<if test="sal!=null and sal!=''">
 			sal=#{sal},
 		</if>
 		<if test="birthday!=null and birthday!=''">
 			birthday=#{birthday},
 		</if>
 	</set>
 	where userid=#{userid}
 </update>

11.3写一个测试类,测试查询结果。代码如下:

Userinfo u=new Userinfo();
u.setUsername("meimeiya");
u.setSex("m");
u.setBirthday(Date.valueOf("2017-12-12"));
u.setSal(10000);
u.setUserid(3);
				
userinfoMapper.updateUser2(u);
//同样需要提交和回滚方法,与添加用户一样,此处略去
12.in(1,2,3)这样的查询语句,入参是list

12.1 在UserinfoMapper.java的接口中定义一个方法,查询用户。代码如下:

public List<Userinfo> getUsersByIds(List<Integer> userids);

12.2 在UserinfoMapper.xml中写上对应的配置信息。代码如下:

<select id="getUsersByIds" resultType="Userinfo">
 	select * from userinfo where userid in
 	<!-- collection遍历的是什么,list,array,item是每次遍历出的值,open,遍历出的内容以什么开头,
            separator遍历出的每一条数据已什么分隔,close以什么结尾-->
 	<foreach collection="list" item="item" open="(" separator="," close=")">
 		#{item}<!-- 遍历出的数据 -->
 	</foreach>
</select>

12.3写一个测试类,测试查询结果。代码如下:

List<Integer> userids=new ArrayList<>();
userids.add(1);
userids.add(3);
userids.add(4);
					
List<Userinfo> userinfo= userinfoMapper.getUsersByIds(userids);
for(Userinfo  user:userinfo){
	System.out.println(user.getSal());
}

13.in(1,2,3)这样的删除语句

13.1 在UserinfoMapper.java的接口中定义一个方法,删除用户。代码如下:

public void deleteUsersByIds(List<Integer> userids);

13.2  在UserinfoMapper.xml中写上对应的配置信息。代码如下:

<delete id="deleteUsersByIds">
     delete from userinfo where userid in
     <foreach collection="list" item="item" open="(" separator="," close=")">
 	    #{item}
     </foreach>
</delete>
13.3 写一个测试类,测试查询结果。代码如下:
List<Integer> userids=new ArrayList<>();
userids.add(1);
userids.add(3);
userids.add(4);
			
userinfoMapper.deleteUsersByIds(userids);
//省去提交回滚代码

14. in(1,2,3)这样的查询语句,入参是[]

14.1 在UserinfoMapper.java的接口中定义一个方法,查询用户。代码如下:

public List<Userinfo> getUsersByIds2(Integer[] userids);
14.2 在UserinfoMapper.xml中写上对应的配置信息。代码如下:
<select id="getUsersByIds2" resultType="Userinfo">
 	select * from userinfo where userid in
 	<foreach collection="array" item="item" open="(" separator="," close=")">
 		#{item}
 	</foreach>
</select>
14.3 写一个测试类,测试查询结果。代码如下:
Integer a []={5,6};
					
List<Userinfo> userinfo= userinfoMapper.getUsersByIds2(a);
for(Userinfo  user:userinfo){
	System.out.println(user.getSal());
}

15.in(1,2,3) and sex=?  这样的查询语句,入参用map

15.1在UserinfoMapper.java的接口中定义一个方法,查询用户。代码如下:

public List<Userinfo> getUsers(Map m);

15.2 在UserinfoMapper.xml中写上对应的配置信息。代码如下:

<select id="getUsers" resultType="Userinfo">
 	select * from userinfo where sex=#{sex} and userid in
 	<!-- collection 是list集合中的一个key -->
 	<foreach collection="userids" item="item" open="(" separator="," close=")">
 		#{item}
 	</foreach>
</select>

15.3写一个测试类,测试查询结果。代码如下:

Map m=new HashMap();
						
m.put("sex","m");
			
List<Integer> userids=new ArrayList<Integer>();
userids.add(5);
userids.add(6);
						
m.put("userids",userids);
						
List<Userinfo> userinfo= userinfoMapper.getUsers(m);
	for(Userinfo  user:userinfo){
	System.out.println(user.getSal());
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值