動態Sql語句中標簽的使用
(一)常用標簽
1.<if>
if標簽通常用於WHERE語句中,通過判斷參數值來決定是否使用某個查詢條件, 他也經常用於UPDATE語句中判斷是否更新某一個字段,還可以在INSERT語句中用來判斷是否插入某個字段的值
2.<where>
where元素的作用是給SQL語句添加一個條件判斷. 如果輸出后是and 開頭的,MyBatis會把第一個and忽略,當然如果是or開頭的,MyBatis也會把它忽略;此外,在where元素中你不需要考慮空格的問題,MyBatis會智能的幫你加上
3.<foreach>
主要用在構建in條件中,它可以在SQL語句中進行迭代一個集合。
foreach元素的屬性主要有item,index,collection,open,separator,close
collection屬性的值有三個分別是list、array、map三種,分別對應的參數類型為:List、數組、map集合
item : 表示在迭代過程中每一個元素的別名
index :表示在迭代過程中每次迭代到的位置(下標)
open :前綴
close :后綴
separator :分隔符,表示迭代時每個元素之間以什么分隔
(二)應用
1.pom.xml
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> </dependencies>
2.SqlMapperConfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPEconfiguration PUBLIC"-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--mybatis的主配置文件--> <configuration> <!--配置環境--> <environments default="mysql"> <!--配置mysql環境--> <environment id="mysql"> <!--配置事務的類型--> <transactionManager type="JDBC"></transactionManager> <!--配置數據源(連接池)--> <dataSource type="POOLED"> <!--配置連接數據庫的4個基本信息--> <property name="driver" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/zml?useUnicode=true&characterEncoding=utf-8"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </dataSource> </environment> </environments> <!--指定映射配置文件的位置,映射配置文件指的是每個dao獨立的配置文件--> <mappers> <mapper resource="dao/UserDao.xml"></mapper> </mappers> </configuration>
3.Users.java
package entity; public class Users { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "Users{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
4.UserVo.java
package entity; import java.util.List; public class UserVo { private Users users; private List<Integer> ids; public Users getUsers() { return users; } public void setUsers(Users users) { this.users = users; } public List<Integer> getIds() { return ids; } public void setIds(List<Integer> ids) { this.ids = ids; } }
5.UserDao.java
package dao; import entity.UserVo; import entity.Users; import org.apache.ibatis.annotations.Param; import java.util.List; public interface UserDao { //查詢所有用戶信息 List<Users> findAll(); //根據ID進行查詢 Users find(int id); //模糊查詢 List<Users> findVague(String name); //查詢用戶總數 int count(); //將實體類封裝到另一個實體類中的模糊查詢 List<Users> findVo(UserVo vo); //根據傳入參數進行查詢 Users findby(Users users); //根據UserVo中的ids集合查詢用戶信息 List<Users> findids(UserVo vo); }
6.UserDao.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPEmapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="dao.UserDao"> <!--查詢所有--> <select id="findAll" resultType="entity.Users"> select * from users </select> <!--根據ID查詢--> <select id="find" resultType="entity.Users"> select * from users where id=#{id} </select> <!--模糊查詢--> <select id="findVague" resultType="entity.Users"> -- select * from users where username like '%${value}%' select * from users where username like #{name} </select> <!--查詢用戶總數--> <select id="count" resultType="int"> select count(id) from users </select> <!--將實體類封裝到另一個實體類中的模糊查詢--> <select id="findVo" resultType="entity.Users"> select * from users where username like #{users.username} </select> <!--根據傳入參數進行查詢--> <select id="findby" resultType="entity.Users" > select * from users <where> <if test="id != null"> and id=#{id} </if> <if test="username != null"> and username=#{username} </if> </where> </select> <!--根據UserVo中的ids集合實現查詢用戶列表--> <select id="findids" resultType="entity.Users" parameterType="entity.UserVo"> select * from users <where> <if test="ids != null and ids.size()>0"> <foreach collection="ids" open="and id in (" close=")" item="id" separator=","> #{id} </foreach> </if> </where> </select> </mapper>
7.UserTest.java
package test; import dao.UserDao; import entity.UserVo; import entity.Users; 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 org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class UserTest { private InputStream in; private SqlSession sqlSession; private UserDao UserDaoImpl; @Before public void init() throws IOException { //1.讀取配置文件 in= Resources.getResourceAsStream("SqlMapperConfig.xml"); //2.創建SqlSessionFactory工廠 SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); SqlSessionFactory factory=builder.build(in); //3.使用工廠生產SqlSession對象 sqlSession=factory.openSession(); //4.使用SqlSession創建dao接口的代理對象 UserDaoImpl=sqlSession.getMapper(UserDao.class); } @After public void destroy() throws IOException { //提交事務 sqlSession.commit(); //6.釋放資源 sqlSession.close(); in.close(); } /** * 查詢所有 * @throws IOException */ @Test public void findall() throws IOException { //5.使用代理對象執行方法 List<Users> users=UserDaoImpl.findAll(); for(Users u:users){ System.out.println(u); } } /** * 根據ID進行查詢 */ @Test public void find(){ Users u=UserDaoImpl.find(15); System.out.println(u); } /** * 模糊查詢,查詢所有名字中有小的用戶 * @throws IOException */ @Test public void findVague() throws IOException { //5.使用代理對象執行方法 List<Users> users=UserDaoImpl.findVague("%小%"); for(Users u:users){ System.out.println(u); } } /** * 查詢用戶總數 */ @Test public void count(){ int c=UserDaoImpl.count(); System.out.println(c); } /** * 將實體類封裝到另一個實體類中的模糊查詢 */ @Test public void findVo(){ UserVo vo=new UserVo(); Users users=new Users(); users.setUsername("%小%"); vo.setUsers(users); List<Users> list=UserDaoImpl.findVo(vo); for(Users u:list){ System.out.println(u); } } /** * if標簽查詢,查詢用戶名為小花,id為25的用戶信息 */ @Test public void findby(){ Users users=new Users(); users.setUsername("小花"); users.setId(25); Users u=UserDaoImpl.findby(users); System.out.println(u); } /** * 根據UserVo中的ids集合查詢用戶信息 */ @Test public void findids(){ UserVo vo=new UserVo(); List<Integer> list=new ArrayList<Integer>(); list.add(13); list.add(14); list.add(15); vo.setIds(list); List<Users> li=UserDaoImpl.findids(vo); for(Users u:li){ System.out.println(u); } } }
