您的位置:首页 > 移动开发

MyBatis之动态sql语句和Mapper

2018-01-14 16:19 501 查看

MyBatis之动态sql语句和Mapper

1.什么是动态sql?

动态sql是mybatis的核心,主要是对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活的拼接、组装。

2.动态sql里面的标签

if 、choose (when ,otherwise) 、trim(where,set)、foreach

3.用动态sql实现查询

配置文件mybatis-config.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" /> -->
<package name="com.bdqn.entity"/>
</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>


工具类:

package com.bdqn.utils;

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 java.io.IOException;
import java.io.InputStream;

/**
* Created by Administrator on 2018/1/14.
* 单利模式:两个私有一个共有
* 一个私有变量一个私有构造一个共有方法
*/
public class Config {
//私有变量
private static SqlSessionFactory factory = null;
private static Config config = null;
private InputStream inputStream = null;
private  SqlSession session=null;

//私有构造
private Config() {
try {
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//公有方法--双重锁
public static synchronized Config getInstant() {
if (config == null) {
synchronized (Config.class) {
if (config == null) {
config = new Config();
}
}
}
return config;
}
public void close(){
try {
if (session!=null){
session.close();
}
if (inputStream!=null){
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}

}
public  SqlSession getSession() {
session = factory.openSession();
return session;
}
}


实体类:

package com.bdqn.entity;

/**
* Created by Administrator on 2018/1/14.
*/
public class User {
private int id;
private String name;
private  String pwd;

public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}

public User() {
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPwd() {
return pwd;
}

public void setPwd(String pwd) {
this.pwd = pwd;
}

@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}


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="UserList" parameterType="map" resultMap="User">
select id,name,pwd from user
<where>
<if test="pid !=null">
and id=#{pid}
</if>
<if test="name !=null">
and name=#{name}
</if>
<if test="pwd !=null">
and sal=#{psal}
</if>
</where>
</select>
</mapper>


dao实现类:

package com.bdqn.dao;

import com.bdqn.entity.User;

import java.util.List;

/**
* Created by Administrator on 2018/1/14.
*/
public interface UserDao {
List<User> selectAll();
}


4.区别名Mapper

在mybatis-config.xml文件中添加下列代码

<typeAliases>
<!--type是指文件路径  alias是区别名-->
<!-- <typeAlias type="com.bdqn.entity.User" alias="User" /> -->
<!--在com.bdqn.entity这个包里的所有实体类-->
<package name="com.bdqn.entity"/>
</typeAliases>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: