1. if 語句 (簡單的條件判斷)
2. choose (when,otherwize) ,相當於java 語言中的 switch ,與 jstl 中的choose 很類似.
3. trim (對包含的內容加上 prefix,或者 suffix 等,前綴,后綴)
4. where (主要是用來簡化sql語句中where條件判斷的,能智能的處理 and or ,不必擔心多余導致語法錯誤)
5. set (主要用於更新時)
6. foreach (用於mybatis語句查詢)


(3)建立com.zk.dao包下的IUser接口:
IUser.java
package com.zk.dao; import org.apache.ibatis.annotations.Param; import com.zk.pojo.User; public interface IUser { public User findUserWithNameLike(@Param("id")int id, @Param("name")String name); }
(4)在com.zk.pojo包下建立User實現IUser接口中的方法,並配置UserMapper.xml
User.java
package com.zk.pojo; public class User { private int id; private String name; private String level; private String phone; 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 getLevel() { return level; } public void setLevel(String level) { this.level = level; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", level=" + level + ", phone=" + phone + "]"; } }
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.zk.dao.IUser"> <select id="findUserWithNameLike" resultType="User"> SELECT * FROM user WHERE id = #{id} <if test="name!= null"> AND name like #{name} </if> </select> </mapper>
(5)配置config/configure.xml
configure.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"> <configuration> <typeAliases> <typeAlias alias="User" type="com.zk.pojo.User" /> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/my"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <!-- // power by http://www.yiibai.com --> <mapper resource="com/zk/pojo/UserMapper.xml" /> </mappers> </configuration>
(6)實現main函數
MainApp.java
package Main; import java.io.IOException; import java.io.Reader; 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 com.zk.dao.IUser; import com.zk.pojo.User; public class MainApp { private static SqlSessionFactory sqlsessionfactory; private static Reader reader; static{ try { reader=Resources.getResourceAsReader("config/configure.xml"); sqlsessionfactory=new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public SqlSessionFactory getSqlSessionFactory() { return sqlsessionfactory; } public static void main(String[]args) { select(1,"c"); } public static void select(int id,String name){ //獲取session連接 SqlSession session=sqlsessionfactory.openSession(); //獲取mapper IUser usermap=session.getMapper(IUser.class); //selectAllUser(); User user = usermap.findUserWithNameLike(id, name); //執行查詢 System.out.println(user.toString()); session.commit(); //selectAllUser(); } }
Main執行結果如下:
2. where (主要是用來簡化sql語句中where條件判斷的,能智能的處理 and or ,不必擔心多余導致語法錯誤)
(1) 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.zk.dao.IUser"> <select id="findUserWithNameLike" resultType="User"> SELECT * FROM user <where> <if test="id!=null">id like #{id}</if> <if test="name!=null">AND name like #{name}</if> </where> </select> </mapper>
運行結果如下:
3. choose (when,otherwize) ,相當於java 語言中的 switch ,與 jstl 中的choose 很類似.
同樣原始的數據庫,僅更改pojo層的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.zk.dao.IUser"> <select id="findUserWithNameLike" resultType="User"> SELECT * FROM user where <choose> <when test="id!=null"> id like #{id} </when> <when test="name!=null"> AND name like #{name} </when> </choose> </select> </mapper>
運行后得到的結果如下圖所示:
4. set (主要用於更新時)
(1)IUser.java
package com.zk.dao; import com.zk.pojo.User; public interface IUser { public User updateUser(User user); }
(2)UserMapper.xml和User.java
User.java
package com.zk.pojo; public class User { private int id; private String name; private String level; private String phone; 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 getLevel() { return level; } public void setLevel(String level) { this.level = level; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", level=" + level + ", phone=" + phone + "]"; } }
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.zk.dao.IUser"> <update id="updateUser" parameterType="User"> update user <set> <if test="name!=null">name=#{name},</if> <if test="level!=null">level=#{level},</if> <if test="phone!=null">phone=#{phone}</if> </set> where id=#{id} </update> </mapper>
(3)configure.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"> <configuration> <typeAliases> <typeAlias alias="User" type="com.zk.pojo.User" /> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/my"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/zk/pojo/UserMapper.xml" /> </mappers> </configuration>
(4)Main.java
package Main; import java.io.IOException; import java.io.Reader; 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 com.zk.dao.IUser; import com.zk.pojo.User; public class MainApp { private static SqlSessionFactory sqlsessionfactory; private static Reader reader; static{ try { reader=Resources.getResourceAsReader("config/configure.xml"); sqlsessionfactory=new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public SqlSessionFactory getSqlSessionFactory() { return sqlsessionfactory; } public static void main(String[]args) { SqlSession session=sqlsessionfactory.openSession(); User user=new User(); user.setId(1); user.setName("a"); user.setLevel("a"); user.setPhone("137298647"); session.update("updateUser",user); session.commit(); } }
運行結果如下:
5. trim (對包含的內容加上 prefix,或者 suffix 等,前綴,后綴)
IUser.java
package com.zk.dao; import org.apache.ibatis.annotations.Param; import com.zk.pojo.User; public interface IUser { public User findUserWithNameLike(@Param("id")int id, @Param("name")String name); }
User.java
package com.zk.pojo; public class User { private int id; private String name; private String level; private String phone; 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 getLevel() { return level; } public void setLevel(String level) { this.level = level; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", level=" + level + ", phone=" + phone + "]"; } }
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.zk.dao.IUser"> <select id="findUserWithNameLike" resultType="User"> SELECT * FROM user <trim prefix="WHERE" prefixOverrides="AND"> <if test="id!=null"> id=#{id} </if> <if test="name!= null"> AND name like #{name} </if> </trim> </select> </mapper>
MainApp.java
package Main; import java.io.IOException; import java.io.Reader; 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 com.zk.dao.IUser; import com.zk.pojo.User; public class MainApp { private static SqlSessionFactory sqlsessionfactory; private static Reader reader; static{ try { reader=Resources.getResourceAsReader("config/configure.xml"); sqlsessionfactory=new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public SqlSessionFactory getSqlSessionFactory() { return sqlsessionfactory; } public static void main(String[]args) { select(1,"a"); } public static void select(int id,String name){ //獲取session連接 SqlSession session=sqlsessionfactory.openSession(); //獲取mapper IUser usermap=session.getMapper(IUser.class); //selectAllUser(); User user = usermap.findUserWithNameLike(id, name); //執行查詢 System.out.println(user.toString()); session.commit(); //selectAllUser(); } }
執行結果如下:
6. foreach (用於mybatis語句查詢)
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.zk.dao.IUser"> <select id="findUsersWithIdforeach" resultType="User"> SELECT * FROM user <where>id in <foreach collection="list" item="item" open="(" close=")" separator=","> #{item} </foreach> </where> </mapper>
IUser.java
package com.zk.dao; import java.util.List; import org.apache.ibatis.annotations.Param; import com.zk.pojo.User; public interface IUser { public List<User> findUsersWithIdforeach(@Param("list")List<Integer> list); }
Main.java
package Main; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; import java.util.List; 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 com.zk.dao.IUser; import com.zk.pojo.User; public class MainApp { private static SqlSessionFactory sqlsessionfactory; private static Reader reader; static{ try { reader=Resources.getResourceAsReader("config/configure.xml"); sqlsessionfactory=new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public SqlSessionFactory getSqlSessionFactory() { return sqlsessionfactory; } public static void main(String[]args) { select(1,"a"); } public static void select(int id,String name){ //獲取session連接 SqlSession session=sqlsessionfactory.openSession(); //獲取mapper IUser usermap=session.getMapper(IUser.class); //selectAllUser(); List ids=new ArrayList(); ids.add(1); ids.add(2); ids.add(3); ids.add(4); //執行查詢 //System.out.println(user.toString()); List<User> users=usermap.findUsersWithIdforeach(ids); for(User u:users) { System.out.println(u); } session.commit(); //selectAllUser(); } }
程序運行結果:
數據庫中數據: