动态SQL语句是核心之一,这里我们通过几个示例来演示
一 多条件查询专题
1.通过恒等式完成动态SQL语句
涉及到if标签
user_id,user_name,sex,money,birthday
${alias}.user_id,${alias}.user_name,${alias}.sex,${alias}.money,${alias}.birthday
- 映射文件
- Java测试代码
@Test
public void IF标签01(){
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.getSqlSession();
Map query = new HashMap<>();
query.put("name", "悟");
query.put("sex", "男");
List userList =
sqlSession.selectList(User.class.getName()+".if01", query);
System.out.println(userList);
} finally {
MyBatisUtils.closeSqlSession(sqlSession);
}
}
-
图解说明
2.where标签和if标签组合
如果发现标签內有内容,那么会在内容的最前面加入关键字 where
如果有内容,会检查内容的最前面是否含有 AND空格 或者 OR空格 ,自动将其抹掉
映射文件
- Java测试代码
@Test
public void IF标签02(){
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.getSqlSession();
Map query = new HashMap<>();
query.put("name", "悟");
query.put("sex", "男");
List userList =
sqlSession.selectList(User.class.getName()+".if02", query);
System.out.println(userList);
} finally {
MyBatisUtils.closeSqlSession(sqlSession);
}
}
- 图解说明
3.trim标签和if标签
- 映射文件
- Java测试代码
@Test
public void trim标签(){
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.getSqlSession();
Map query = new HashMap<>();
query.put("name", "悟");
query.put("sex", "男");
List userList =
sqlSession.selectList(User.class.getName()+".if03", query);
System.out.println(userList);
} finally {
MyBatisUtils.closeSqlSession(sqlSession);
}
}
-
图解说明
二 更新操作
1.set标签
当你发现有内容的时候,在内容的最前面加入 set
当你发现有内容的时候,检查内容的最后面是否有逗号"," 如果将其抹掉
映射文件
UPDATE
oa_user
user_name=#{user_name},
sex=#{sex},
money=#{money},
birthday=#{birthday},
WHERE
user_id=#{user_id}
- Java测试代码
@Test
public void 更新操作_变更数据库(){
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.getSqlSession();
//数据
User user = new User();
user.setUser_id(3);
user.setUser_name("天蓬元帅");
//日期的转换
String date = "1998-09-09";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
user.setBirthday(df.parse(date));
int row =sqlSession.update(User.class.getName()+".update01", user);
System.out.println(row);
//事务的提交
sqlSession.commit();
}catch (Exception ex) {
ex.printStackTrace();
}finally {
MyBatisUtils.closeSqlSession(sqlSession);
}
}
-
图解说明
2.trim标签完成更新
- 映射文件
UPDATE
oa_user
user_name=#{user_name},
sex=#{sex},
money=#{money},
birthday=#{birthday},
WHERE
user_id=#{user_id}
- Java测试代码
@Test
public void 更新操作_TRIM标签_变更数据库(){
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.getSqlSession();
//数据
User user = new User();
user.setUser_id(3);
user.setUser_name("天蓬元帅123");
//日期的转换
String date = "1998-10-09";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
user.setBirthday(df.parse(date));
int row =sqlSession.update(User.class.getName()+".update02", user);
System.out.println(row);
//事务的提交
sqlSession.commit();
}catch (Exception ex) {
ex.printStackTrace();
}finally {
MyBatisUtils.closeSqlSession(sqlSession);
}
}
三 choose 标签简单使用
- 映射文件
- Java测试代码
@Test
public void choose标签(){
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.getSqlSession();
Map query = new HashMap<>();
query.put("sex", "女123213");
List userList =
sqlSession.selectList(User.class.getName()+".choose01", query);
System.out.println(userList);
} finally {
MyBatisUtils.closeSqlSession(sqlSession);
}
}
四 小于号问题
- 映射文件
- Java测试代码
@Test
public void 小于号的解决问题(){
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.getSqlSession();
List userList =
sqlSession.selectList(User.class.getName()+".less01", 1.0*800);
System.out.println(userList);
userList =
sqlSession.selectList(User.class.getName()+".less02", 1.0*600);
System.out.println(userList);
} finally {
MyBatisUtils.closeSqlSession(sqlSession);
}
}
-
图解说明
请参考附录1说明
五 动态添加语句
- 映射文件
INSERT INTO oa_user
user_name,
sex,
money,
birthday,
#{user_name},
#{sex},
#{money},
#{birthday},
- Java测试代码
@Test
public void 动态的添加语句(){
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.getSqlSession();
//数据
User user = new User();
user.setUser_name("刘备12333333");
//日期的转换
String date = "1998-10-09";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
user.setBirthday(df.parse(date));
user.setMoney(1111.11);
int row =sqlSession.insert(User.class.getName()+".add01", user);
System.out.println(row);
//事务的提交
sqlSession.commit();
System.out.println(user);
}catch (Exception ex) {
ex.printStackTrace();
}finally {
MyBatisUtils.closeSqlSession(sqlSession);
}
}
六 foreach标签
1.数组方式
- 映射方式
DELETE FROM
oa_user
WHERE user_id in
#{shxt}
- Java测试代码
@Test
public void 传递数组删除规则(){
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.getSqlSession();
int row = sqlSession.delete(User.class.getName()+".delete01", new int[]{5,6});
//事务的提交
sqlSession.commit();
System.out.println(row);
}catch (Exception ex) {
ex.printStackTrace();
}finally {
MyBatisUtils.closeSqlSession(sqlSession);
}
}
2.List方式
- 映射文件
DELETE FROM
oa_user
WHERE user_id in
#{shxt}
- Java测试代码
@Test
public void 传递集合删除规则(){
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.getSqlSession();
List tempList = new ArrayList<>();
tempList.add(8);
tempList.add(9);
int row = sqlSession.delete(User.class.getName()+".delete02", tempList);
//事务的提交
sqlSession.commit();
System.out.println(row);
}catch (Exception ex) {
ex.printStackTrace();
}finally {
MyBatisUtils.closeSqlSession(sqlSession);
}
}
3.Map方式
- 映射方式
DELETE FROM
oa_user
WHERE user_id in
#{shxt}
- Java测试代码
@Test
public void 传递Map删除规则(){
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.getSqlSession();
List tempList = new ArrayList<>();
tempList.add(7);
tempList.add(10);
Map map = new HashMap();
map.put("id_array", tempList);
int row = sqlSession.delete(User.class.getName()+".delete03", map);
//事务的提交
sqlSession.commit();
System.out.println(row);
}catch (Exception ex) {
ex.printStackTrace();
}finally {
MyBatisUtils.closeSqlSession(sqlSession);
}
}
-
图解方式
4.批量添加
- 映射文件
INSERT INTO
oa_user
VALUES
(#{user.user_name},#{user.sex},#{user.money})
附录1 : MyBatis在xml文件中处理大于号小于号的方法
第一种方法:
用了转义字符把>和<替换掉,然后就没有问题了。
SELECT * FROM test WHERE 1 = 1 AND start_date <= CURRENT_DATE AND end_date >= CURRENT_DATE
附:XML转义字符
第二种方法
因为这个是xml格式的,所以不允许出现类似“>”这样的字符,但是都可以使用符号进行说明,将此类符号不进行解析
你的可以写成这个:
mapper文件示例代码