动态sql片段 resultMap map多个参数 if拼接 注解 where set 分页查询

本文介绍了如何在MyBatis中使用命名空间、resultMap、map参数、if标签、where标签、set标签进行动态SQL拼接,并展示了分页查询的实现。文章通过一个具体的例子,演示了从配置文件到DAO接口再到Mapper XML的全过程,包括实体类、接口声明、XML配置和测试类的编写。

2018年1月12日 23:08:17


要掌握在某类的配置文件写命名空间到dao包下类dao


要掌握在配置文件里取类型别名 resultMap别名


要掌握

resultType全查询

resultMap全查询

map多个参数查询

if拼接

注解

where

set

分页查询

模糊查询有个关键字'%',String,'%'

创建数据库的语句找不到类沾不了





项目WebRoot\WEB-INF\lib里粘贴四个包 添加依赖

mysql-connector-java-5.1.0-bin.jar

mybatis-3.2.2.jar

mybatis-3.2.2-sources.jar

log4j-1.2.16.jar





然后src里粘贴

database.properties

mybatis-config.xml

log4j.properties




工具包src\com\bdqn\titls创建工具类 返回sqlsession的session 以后要换成用单例模式

package com.bdqn.titls;


import java.io.IOException;
import java.io.InputStream;


import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


public class SqlSessionUtils {
private static SqlSessionFactory sqlSessionFactory;
static{
try {

//加载配置文件 获得流
InputStream ipsInputStream=Resources.getResourceAsStream("mybatis-config.xml");

//工厂通过new 工厂builder().build流获得
sqlSessionFactory=new SqlSessionFactoryBuilder().build(ipsInputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SqlSession getSession(){
//不自动提交事物 false 以后由程序员commit手动提交 异常的话就回滚
SqlSession session=sqlSessionFactory.openSession(false);
return session;
}
public static void closeSession(SqlSession session){
if (session!=null) {
session.close();
}
}
}




实体包src\com\bdqn\entity建立实体类 实现序列化接口 各种标配方法

package com.bdqn.entity;


import java.io.Serializable;


public class User implements Serializable{
private int uId;
//private String uName;
private String uname;//如果这个类属性名和表名不一样
private String uPwd;
private String uPhone;
private String uAddress;
private String uBirthday;
public User() {
super();
}
// public User(int uId, String uName, String uPwd, String uPhone,
// String uAddress, String uBirthday) {
// super();
// this.uId = uId;
// this.uName = uName;
// this.uPwd = uPwd;
// this.uPhone = uPhone;
// this.uAddress = uAddress;
// this.uBirthday = uBirthday;
// }
// @Override
// public String toString() {
// return "User [uId=" + uId + ", uName=" + uName + ", uPwd=" + uPwd
// + ", uPhone=" + uPhone + ", uAddress=" + uAddress
// + ", uBirthday=" + uBirthday + "]";
// }
public int getuId() {
return uId;
}
public void setuId(int uId) {
this.uId = uId;
}
// public String getuName() {
// return uName;
// }
// public void setuName(String uName) {
// this.uName = uName;
// }
public String getuPwd() {
return uPwd;
}
public void setuPwd(String uPwd) {
this.uPwd = uPwd;
}
public String getuPhone() {
return uPhone;
}
public void setuPhone(String uPhone) {
this.uPhone = uPhone;
}
public String getuAddress() {
return uAddress;
}
public void setuAddress(String uAddress) {
this.uAddress = uAddress;
}
public String getuBirthday() {
return uBirthday;
}
public void setuBirthday(String uBirthday) {
this.uBirthday = uBirthday;
}

public User(int uId, String uname, String uPwd, String uPhone,
String uAddress, String uBirthday) {
super();
this.uId = uId;
this.uname = uname;
this.uPwd = uPwd;
this.uPhone = uPhone;
this.uAddress = uAddress;
this.uBirthday = uBirthday;
}
@Override
public String toString() {
return "User [uId=" + uId + ", uName=" + uname + ", uPwd=" + uPwd
+ ", uPhone=" + uPhone + ", uAddress=" + uAddress
+ ", uBirthday=" + uBirthday + "]";
}
public String getuname() {
return uname;
}
public void setuname(String uname) {
this.uname = uname;
}
}





src\com\bdqn\dao包粘贴Mapper.xml配置文件叫做UserMapper.xml




配置src下的配置文件 取类型别名 加载这个配置文件的时候顺带配置UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">


<!-- 通过这个配置文件完成mybatis与数据库的连接 -->
<configuration>
<!-- 引入 database.properties 文件-->
<properties resource="database.properties"/>
<!-- 配置mybatis的log实现为LOG4J -->
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>

<typeAliases>
<typeAlias type="com.bdqn.entity.User" alias="User"></typeAlias>
</typeAliases>

<environments default="development">
<environment id="development">
<!--配置事务管理,采用JDBC的事务管理  -->
<transactionManager type="JDBC"></transactionManager>
<!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>

<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<mapper resource="com/bdqn/dao/UserMapper.xml"/>
</mappers>
</configuration>




src\com\bdqn\dao的dao接口声明抽象方法

import com.bdqn.entity.User;


public interface UserDao {

//全查询
List<User> selectAll();

//用类型别名查
List<User> selectAllLeiBieMing();

//两个参数 使用map
List<User> selectMap(Map<String, String> map);

//if拼接查询
List<User> selectIf(Map<String, String> map);

//注解查询   表列名       表列类型       参数
List<User> selecctZhuShi(@Param("uPwd")String uPwd,@Param("uAddress")String uAddress);

//where
List<User> selecctWhere(@Param("uPwd")String uPwd,@Param("uAddress")String uAddress);

//set逗号
int updateUserSet(User user);

//分页查询
List<User> selectFenYe(@Param("PageIndex")Integer BPageIndex,@Param("PageSize")Integer BPageSize);
}





src\com\bdqn\dao包配置UserMapper.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.bdqn.dao.UserDao">

<select id="selectAll" resultType="User">
select * from user
</select>


<!--<resultMap type="类别名" id="取resultMap别名">-->
<resultMap type="User" id="MapUser">
<!--<result property="类属性名" column="表列名"/>-->
<result property="uId" column="uId"/>
<result property="uname" column="uName"/>
<result property="uPwd" column="uPwd"/>
<result property="uPhone" column="uPhone"/>
<result property="uAddress" column="uAddress"/>
<result property="uBirthday" column="uBirthday"/>
</resultMap>


<!--用了resultMap别名y以后 resultMap就用那个名-->
<select id="selectAllLeiBieMing" resultMap="MapUser">
select * from user
</select>

<select id="selectMap" resultMap="MapUser" parameterType="Map">
select * from user where uPwd=#{uPwd} and uAddress=#{uAddress}
</select>

<select id="selectIf" resultMap="MapUser" parameterType="Map">
select * from user where
<if test="uPwd!=null">
uPwd=#{uPwd}
</if>
<if test="uAddress!=null">
<!--第二段要加and-->
and uAddress=#{uAddress}
</if>
</select>

<!-- 注解不需要参数类型 -->
<select id="selecctZhuShi" resultMap="MapUser">
select * from user where
<if test="uPwd!=null">
uPwd=#{uPwd}
</if>
<if test="uAddress!=null">
<!--第二段要加and-->
and uAddress=#{uAddress}
</if>
</select>

<!-- where标签,作用能省掉第一段拼接的and-->
<select id="selecctWhere" resultMap="MapUser">
select * from user <where>
<if test="uPwd!=null">
and uPwd=#{uPwd}
</if>
<if test="uAddress!=null">
<!--第二段要加and-->
and uAddress=#{uAddress}
</if>
</where>
</select>

<update id="updateUserSet" parameterType="User">
update user <set>

<!--记得要逗号-->
<if test="uPwd!=null">uPwd=#{uPwd},</if>
<if test="uPhone!=null">uPhone=#{uPhone},</if>
<if test="uBirthday!=null">uBirthday=#{uBirthday},</if>
</set>
<where>
uId=#{uId}
</where>
</update>

<select id="selectFenYe" resultMap="MapUser">
select * from user limit #{PageIndex},#{PageSize}
</select>
</mapper>





src\com\bdqn\test测试类做测试

package com.bdqn.test;


import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.apache.ibatis.session.SqlSession;


import com.bdqn.dao.UserDao;
import com.bdqn.entity.User;
import com.bdqn.titls.SqlSessionUtils;


public class Test {
public static void main(String[] args) {
//原来的全查询
// List<User> list=SqlSessionUtils.getSession().getMapper(UserDao.class).selectAll();
// for (User user : list) {
// System.out.println(user.toString());
// }
//这个方法报错是可能是因为表列名和

//类型别名以后的查询
// List<User> list=SqlSessionUtils.getSession().getMapper(UserDao.class).selectAllLeiBieMing();
// for (User user : list) {
// System.out.println(user.toString());
// }

//map多个参数查询
// Map<String, String> map=new  HashMap<String, String>();
// map.put("uPwd", "456");
// map.put("uAddress", "guangzhoubaiyun");
// List<User> list=SqlSessionUtils.getSession().getMapper(UserDao.class).selectMap(map);
// for (User user : list) {
// System.out.println(user.toString());
// }

//if拼接
// Map<String, String> map=new  HashMap<String, String>();
// map.put("uPwd", "987");
// map.put("uAddress", "guangzhoubeihai");
// List<User> list=SqlSessionUtils.getSession().getMapper(UserDao.class).selectIf(map);
// for (User user : list) {
// System.out.println(user.toString());
// }

//注解 注意参数一定要符合dao的类型 参数 参数
// List<User> list=SqlSessionUtils.getSession().getMapper(UserDao.class).selecctZhuShi("678","guangzhouzhujiang");
// for (User user : list) {
// System.out.println(user.toString());
// }

//where 注意参数一定要符合dao的类型 参数 参数
// List<User> list=SqlSessionUtils.getSession().getMapper(UserDao.class).selecctZhuShi("321","guangzhounanning");
// for (User user : list) {
// System.out.println(user.toString());
// }

//set
// SqlSession session=SqlSessionUtils.getSession();
// try {
// User user=new User();
// user.setuId(7);
// user.setuPwd("666");
// user.setuPhone("13799999999");
// user.setuBirthday("1996-10-10");
// int num=session.getMapper(UserDao.class).updateUserSet(user);
// session.commit();
// System.out.println(num);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// session.rollback();
// }

//分页查询
List<User> list=SqlSessionUtils.getSession().getMapper(UserDao.class).selectFenYe(2, 4);
for (User user : list) {
System.out.println(user.toString());
}
}
}







?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值