Mybatis对数据库进行基本的增删改查

搭建好了Mybatis环境之后,开始利用Mybatis对数据库进行增删改查操作。用的是MySQL数据库,图形化界面用的是navicate。

一、模糊查询操作:
在项目Mybatis_1中:
1.在SQL映射文件UserInfoMapper.xml中加入要执行的模糊查询语句:

<!-- 根据用户名模糊查询用户 -->
    <select id="findUserInfoByUserName" parameterType="String" resultType="UserInfo">
    	select * from user_information where username like CONCAT(CONCAT('%',#{username}),'%')
    </select>

select标签:代表进行查询操作

id属性:用于唯一标识该标签,在调用sqlsession的方法时该id值作为参数,来确定要执行映射文件中的哪段SQL语句

parameterType属性:传入给sql语句的参数类型是什么 (本例中String就表示查询语句中的username的类型 )

resultType属性:这里由于在mybatis核心配置文件 mybatis-config.xml 中对包中的类注册了别名,所以设置为UserInfo即可,表示将查询到的结果封装到实体类UserInfo中,注册别名代码如下:

<!--给包中的类注册别名 -->
	<typeAliases>
		<package name="wyd.mybatis.pojo"/>
	</typeAliases>

通过注册别名,简化对需要用到该包中的实体类的书写,只需要写类名而不用写类的路径全名。

select语句

select * from user_information where username like CONCAT(CONCAT('%',#{username}),'%')

①该语句利用CONCAT函数进行字符串拼接而不用 “+” 可以防止SQL注入从而更加安全
② #{}为一个占位符,相当于jdbc中的 “?” 此外还有一个 ${} ,能用#{}就别用 $(),前者需要传入参数值,能有效防止SQL注入,后者是直接拼接到SQL会有SQL注入的问题
2.在mybatis核心配置文件中引入映射文件UserInfoMapper

	<mappers>
		<!-- 引用映射文件 -->
		<mapper resource="wyd/mybatis/mapper/UserInfoMapper.xml"/>
	</mappers>

mappers标签的resource属性值为映射文件UserInfoMapper全路径名
3.在测试类MybatisTest中进行模糊查询,代码如下:

package wyd.mybatis.test;
import static org.junit.Assert.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import wyd.mybatis.pojo.UserInfo;
public class MybatisTest {
	private SqlSessionFactory sqlSessionFactory;
	private SqlSession sqlSession;
	@Before
	public void init(){
		String resource="mybatis-config.xml";
		InputStream inputStream;		
		try {
			//读取mybatis核心配置文件
			inputStream=Resources.getResourceAsStream(resource);
			//建立会话工厂
			sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
			//通过工厂获取执行SQL语句的sqlsession
			sqlSession=sqlSessionFactory.openSession();
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}
	@Test
	//根据用户名模糊查询用户
	public void testFindUserInfoByUserName(){
		//利用selectList查询,查询结果集封装到集合users中,该集合存的元素为UserInfo类型
		//sqlsession传入的参数对应映射文件UserInfoMapper对应sql语句的id值
		List<UserInfo> users=sqlSession.selectList("findUserInfoByUserName", "w");
		//打印集合中的元素
		System.out.println(users.toString());
	}
	@After
	public void destory(){
		//提交
		sqlSession.commit();
		//关闭连接
		sqlSession.close();		
	}
}

选中testFindUserInfoByUserName()方法,执行,结果如下:
在这里插入图片描述
在打印的日志中可以看到有三条结果,每一条都是一个UserInfo类型的,对应数据库中数据表有如下三条记录中有’w’,模糊查询成功!
在这里插入图片描述
二、添加用户操作
映射文件文件中的insert语句:

<!-- 添加用户 -->
    <insert id="addUserInfo" parameterType="String">
    	insert into user_information (username,password,realname,e_mail,phone) values(#{username},#{password},#{realname},#{e_mail},#{phone})
    </insert>

添加用户的代码,如下:

@Test
	//添加用户
	public void testAddUserInfo(){
		UserInfo ui=new UserInfo();
		ui.setUsername("panda");
		ui.setPassword("1233211");
		ui.setRealname("大熊猫");
		ui.setE_mail("123123@qq.com");
		ui.setPhone("34234212312131");
		//执行受影响的行
		int result=sqlSession.insert("addUserInfo", ui);
		if(result>0){
			System.out.println("插入成功");
		}else{
			System.out.println("插入失败");
		}
		//插入之后需要提交事务
		sqlSession.commit();
	}

①利用sqlsession的insert方法进行增加操作,第一个参数对应映射文件相关insert语句的id值,插入的值利用实体类的set方法封装的对象ui
②sqlsession的insert返回一个整型值,代表受影响的行数,如果>0,说明插入成功,否则插入失败

选中该方法执行,结果如下:
在这里插入图片描述
查询数据库中的记录如下,可以看到增加了一条“大熊猫”的记录:
在这里插入图片描述

三、修改用户操作
映射文件中的update语句:

<!-- 修改用户 -->
    <update id="uspdateUserInfo" parameterType="UserInfo">
    	update user_information set username=#{username},password=#{password} where id=#{id}
    </update>

修改用户的代码如下:

//修改用户
	public void testUpdateUserInfo(){
		//先查询并获取获取id为15的记录ui(UserInfo类型)
		UserInfo ui=sqlSession.selectOne("findUserInfoById",15);
		//设置ui的密码属性为zzh2311123
		ui.setPassword("zzh2311123");
		//对ui执行update语句
		int result=sqlSession.update("uspdateUserInfo", ui);
		//如果影响的记录条数大于0,则修改成功,否则失败
		if(result>0){
			System.out.println("修改成功!");
			System.out.println(ui);
		}else{
			System.out.println("修改失败!");
		}
	}

执行结果如下:
在这里插入图片描述
查询数据库id为15的记录:
在这里插入图片描述
密码已经改变为zzh2311123,至此,修改用户完毕!

四、根据用户id删除用户操作
映射文件中的delete语句:

<!-- 删除用户 -->
    <delete id="deleteUserInfo" parameterType="int">
    	delete from user_information where id =#{id}
    </delete>

删除用户的代码如下:

//删除用户
	public void testDeleteUserInfo(){
		//定义受影响的行数result
		int result=sqlSession.delete("deleteUserInfo", 18);
		if(result>0){
			System.out.println("删除成功!");
		}else{
			System.out.println("删除失败!");
		}
		sqlSession.commit();
	}

查询数据库,结果如下:
在这里插入图片描述
id为15的用户被删除,完毕!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值