Mybatis-02-对数据库的基本操作
来源:互联网 发布:淘宝的临期化妆品 编辑:程序博客网 时间:2024/06/05 20:20
一.使用Mybatis进行一些基本的数据库操作
首先要创建一个使用了Mybatis框架的Java项目,在我的上篇博客中有详细的讲解Mybatis-01-简介及入门
另外我将这个示例程序传到了Github上Mybatis入门
1.模糊查询
1.1 mapper.xml配置文件中配置查询语句
//mapper.xml文件中定义的SQL,使用模糊查询的关键字LIKE <select id="query1" parameterType="String" resultType="com.sandking.mybatis.pojo.BbsEmployee"> SELECT * FROM `bbs_employee` WHERE username LIKE #{username} </select>
- mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的id即是Mappedstatement对象的id
- parameterType属性用来声明输入参数的类型
- resultTypey属性用来声明输出结果的类型,如果是持久化类,则填写其全路径
- # { }是输入参数的占位符,相当于JDBC中的PreparedStatement类编程中的 ? 占位符
1.2 测试程序通过SQL的id调用查询语句
@Test public void query1(){ SqlSession sqlSession = sqlSessionFactory.openSession(); //在测试程序中传入参数 -----> %参数% //使用sqlSessoin的selectOne()方法,只能用来查询一条数据,如果查出多条数据则报错,查询多条数据使用selectList()方法 BbsEmployee bbsEmployee = sqlSession.selectOne("query1","%ad%"); System.out.println(bbsEmployee.getUsername()); sqlSession.close(); }
Mybatis查询总结:
1.根据结果集的数量使用查询方法,selectList()方法可以用来执行查询有多个结果的查询,而selectOne()方法不能,否则会报错
2.mapper.xml文件中的SQL必须定义参数类型(parameterType)和结果类型(resultType)
parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中
resultType:指定输出结果类型,mybatis将SQL查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象存放到List容器中
3.mapper映射文件中将参数拼接进SQL语句的方式“ #{ } ”和 ” ${ } ”
#{ }表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
上面示例程序使用 #{ } 拼接SQL语句,下面再举例使用 ${ } 拼接SQL语句
//这里SQL语句中的 LIKE '%${value}%' 部分变量名value是固定的,指程序中传来的值<select id="query2" parameterType="String" resultType="com.sandking.mybatis.pojo.BbsEmployee"> SELECT * FROM `bbs_employee` WHERE username LIKE '%${value}%' </select>
@Test public void query2(){ SqlSession sqlSession = sqlSessionFactory.openSession(); //查询方法的第二个参数,即输入参数不用再加修饰符 BbsEmployee bbsEmployee = sqlSession.selectOne("query2","ad"); System.out.println(bbsEmployee.getUsername()); sqlSession.close(); }
${ }表示拼接sql串,通过${ }可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换,${ }可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${ }括号中只能是value。
实际应用中 #{ } 和 ${ }经常搭配混合使用
2.插入数据
2.1 mapper.xml映射文件中定义SQL语句
//insert语句只用定义输入参数类型,这里是一个持久化类 <insert id="insert" parameterType="com.sandking.mybatis.pojo.BbsEmployee"> INSERT INTO `bbs_employee` (username,password) VALUES (#{username},#{password}) </insert>
2.2 编写测试程序
@Test public void insert(){ SqlSession sqlSession = sqlSessionFactory.openSession(); //创建一个持久化类的对象作为插入操作的参数 BbsEmployee bbsEmployee = new BbsEmployee(); bbsEmployee.setUsername("sisisi"); bbsEmployee.setPassword("123"); sqlSession.insert("insert",bbsEmployee); System.out.println(bbsEmployee); sqlSession.commit(); }
2.3 运行结果:
id为自增主键,执行插入操作后打印bbsEmployee对象,发现id值为0
打开Navicat却看见插入的这条数据的id值为6,说明插入语句不会自动返回自增主键的值
如果想得到插入数据后自增主键的值,需要通过在映射文件中添加配置,返回插入数据后自动生成的自增主键
Mybatis不仅可以返回自增主键的值,也可以返回uuid主键的值
<1>返回自增主键
<insert id="insert" parameterType="com.sandking.mybatis.pojo.BbsEmployee"> <!-- selectKey:主键返回 --> <!-- keyColumn:主键对应的表中的字段 --> <!-- keyProperty:主键对应的持久化类中的属性 --> <!-- order:设置执行查询操作的时机(在instert执行之前或执行之后) --> <!-- resultType:设置返回的id的类型 --> <selectKey keyColumn="id" keyProperty="id" order="AFTER" resultType="int"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO `bbs_employee` (username,password) VALUES (#{username},#{password}) </insert>
再次执行插入操作后,控制台打印的结果
发现打印id值不再为0,打开Navicat发现第二次插入数据的id值为7,与控制台打印的id相同,说明程序正确返回了自增主键的值
<2>返回uuid主键
<insert id="insert" parameterType="com.sandking.mybatis.pojo.BbsEmployee"> //在执行insert操作前执行查询 <selectKey keyColumn="id" keyProperty="id" order="BEFORE" resultType="String"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO `bbs_user` (username,password) VALUES (#{username},#{password}) </insert>
3.更新数据
//根据id值确定更改哪条数据 <insert id="update" parameterType="com.sandking.mybatis.pojo.BbsEmployee"> UPDATE `bbs_employee` SET password = #{password} WHERE id = #{id} </insert>
@Test public void update(){ SqlSession sqlSession = sqlSessionFactory.openSession(); BbsEmployee bbsEmployee = new BbsEmployee(); bbsEmployee.setId(5); bbsEmployee.setPassword("3425"); sqlSession.update("update",bbsEmployee); sqlSession.commit(); sqlSession.close(); }
4.删除数据
<delete id="delete" parameterType="int"> DELETE FROM `bbs_employee` WHERE id = #{id} </delete>
@Test public void delete(){ SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession.delete("delete",6); sqlSession.commit(); sqlSession.close(); }
- Mybatis-02-对数据库的基本操作
- 对数据库的基本操作
- 对数据库的基本操作
- mybatis笔记-1-数据库的基本操作
- JDBC对数据库的基本操作
- JDBC对数据库的基本操作
- servlet对数据库的基本操作
- sql2005对数据库的一些基本操作
- c#对oracle数据库的基本操作
- 四、对数据库的基本操作
- yii2对数据库的基本操作
- java 对数据库的基本操作
- android基本方式对数据库的操作
- Jdbc对Mysql数据库的基本操作
- Android对数据库的基本操作
- JDBC对数据库的基本操作
- MySQL对数据库的基本操作语句
- java连接数据库及对数据库的基本操作
- ES6的开发环境搭建
- 冰山在融化读书笔记
- (转载)Java后端程序员1年工作经验总结
- Qt只QStringList的简单使用方法
- 反转链表
- Mybatis-02-对数据库的基本操作
- CPHS介绍
- Java 继承,多态,接口,异常和集合框架
- 获取jar包中的文件路径
- 人工智能学习开篇
- Post Man的使用
- Python 2.7.12并安装最新pip
- gpujpeg 简介
- org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException 异常解决方案