javaEE框架课程
List
sqlSession.selectList(\, \张\); System.out.println(list.size()); } catch (Exception e) { e.printStackTrace(); } finally {
if (sqlSession != null) { sqlSession.close(); } }
}
}
1.6.7.1.4 #{}和${}
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。#{}可以接收简单类型值或pojo属性值。如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换,${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。
1.6.7.1.5 parameterType和resultType
parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。
1.6.7.1.6 selectOne和selectList
selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3 at
javaEE框架课程
org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70)
selectList可以查询一条或多条记录。
1.6.7.2 添加
1.6.7.2.1 映射文件:
在SqlMapConfig.xml中添加:
select LAST_INSERT_ID()
insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
1.6.7.2.2 测试程序:
// 添加用户信息 @Test
publicvoid testInsert() {
// 数据库会话实例
SqlSession sqlSession = null; try {
// 创建数据库会话实例sqlSession
sqlSession = sqlSessionFactory.openSession(); // 添加用户信息
Useruser =new User();
user.setUsername(\张小明\); user.setAddress(\河南郑州\); user.setSex(\);
user.setPrice(1999.9f);
sqlSession.insert(\, user);
//提交事务
sqlSession.commit(); } catch (Exception e) {
javaEE框架课程
}
e.printStackTrace(); } finally {
if (sqlSession != null) { sqlSession.close(); } }
1.6.7.2.3 mysql自增主键返回
通过修改sql映射文件,可以将mysql自增主键返回:
insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address});
添加selectKey实现将主键返回
keyProperty:返回的主键存储在pojo中的哪个属性
order:selectKey的执行顺序,是相对与insert语句来说,由于mysql的自增原理执行完insert语句之后才将主键生成,所以这里selectKey的执行顺序为after resultType:返回的主键是什么类型
LAST_INSERT_ID():是mysql的函数,返回auto_increment自增列新记录id值。
1.6.7.2.4 Mysql使用uuid实现主键
需要增加通过select uuid()得到uuid值
insert into user(id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address})
注意这里使用的order是“BEFORE”
javaEE框架课程
1.6.7.2.5 Oracle使用序列生成主键
首先自定义一个序列且用于生成主键,selectKey使用如下: SELECT 自定义序列.NEXTVAL FROM DUAL insert into user(id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address})
注意这里使用的order是“BEFORE”
1.6.7.3 删除
1.6.7.3.1 映射文件:
1.6.7.3.2 测试程序:
// 根据id删除用户 @Test
publicvoidtestDelete() {
// 数据库会话实例
SqlSession sqlSession = null; try {
// 创建数据库会话实例sqlSession
sqlSession = sqlSessionFactory.openSession(); // 删除用户
sqlSession.delete(\,18);
javaEE框架课程
}
// 提交事务
sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); } finally {
if (sqlSession != null) { sqlSession.close(); } }
1.6.7.4 修改 1.6.7.4.1 映射文件
username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
1.6.7.4.2 测试程序
// 更新用户信息 @Test
publicvoidtestUpdate() {
// 数据库会话实例
SqlSession sqlSession = null; try {
// 创建数据库会话实例sqlSession
sqlSession = sqlSessionFactory.openSession(); // 添加用户信息
Useruser =new User(); user.setId(16);
user.setUsername(\张小明\); user.setAddress(\河南郑州\); user.setSex(\);
user.setPrice(1999.9f);