mybatis 模糊查詢寫法_跟著我 簡單學下Mybatis的CRUD操作
阿新 • • 發佈:2020-12-10
技術標籤:mybatis 模糊查詢寫法
Mybatis 學習內容
搭建環境
加入依賴架包
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies>
建立實體類
private Integer deptId;
private String deptName;
建立VO類
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
建立介面
package com.yang.dao; import com.yang.domain.QueryVo; import com.yang.domain.User; import java.util.List; /** * * 使用者的持久層介面 */ public interface IUserDao { /** * 查詢所有使用者 * @return */ List<User> findAll(); /** * 儲存使用者 * @param user */ void saveUser(User user); /** * 更新使用者 * @param user */ void updateUser(User user); /** * 根據Id刪除使用者 * @param userId */ void deleteUser(Integer userId); /** * 根據id查詢使用者資訊 * @param userId * @return */ User findById(Integer userId); /** * 根據名稱模糊查詢使用者資訊 * @param username * @return */ List<User> findByName(String username); /** * 查詢總使用者數 * @return */ int findTotal(); /** * 根據queryVo中的條件查詢使用者 * @param vo * @return */ List<User> findUserByVo(QueryVo vo); }
配置SqlMapConfig.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> <!-- 配置properties 可以在標籤內部配置連線資料庫的資訊。也可以通過屬性引用外部配置檔案資訊 resource屬性: 常用的 用於指定配置檔案的位置,是按照類路徑的寫法來寫,並且必須存在於類路徑下。 url屬性: 是要求按照Url的寫法來寫地址 URL:Uniform Resource Locator 統一資源定位符。它是可以唯一標識一個資源的位置。 它的寫法: http://localhost:8080/mybatisserver/demo1Servlet 協議 主機 埠 URI URI:Uniform Resource Identifier 統一資源識別符號。它是在應用中可以唯一定位一個資源的。 --> <properties url="file:///D:ToolsIdeaworkmybatis_examplesrcmainresourcesjdbcConfig.properties"> <!-- <property name="driver" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"></property> <property name="username" value="root"></property> <property name="password" value="1234"></property>--> </properties> <!--使用typeAliases配置別名,它只能配置domain中類的別名 --> <typeAliases> <!--typeAlias用於配置別名。type屬性指定的是實體類全限定類名。alias屬性指定別名,當指定了別名就再區分大小寫 <typeAlias type="com.yang.domain.User" alias="user"></typeAlias>--> <!-- 用於指定要配置別名的包,當指定之後,該包下的實體類都會註冊別名,並且類名就是別名,不再區分大小寫--> <package name="com.yang.domain"></package> </typeAliases> <!--配置環境--> <environments default="mysql"> <!-- 配置mysql的環境--> <environment id="mysql"> <!-- 配置事務 --> <transactionManager type="JDBC"></transactionManager> <!--配置連線池--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </dataSource> </environment> </environments> <!-- 配置對映檔案的位置 --> <mappers> <mapper resource="com/yang/dao/IUserDao.xml"></mapper> <!-- package標籤是用於指定dao介面所在的包,當指定了之後就不需要在寫mapper以及resource或者class了 --> <!-- <package name="com.yang.dao"></package>--> </mappers> </configuration>
配置log4j.properties檔案
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %mn
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %mn
配置IUserDao.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.yang.dao.IUserDao">
<!-- 配置 查詢結果的列名和實體類的屬性名的對應關係 -->
<resultMap id="userMap" type="uSeR">
<!-- 主鍵欄位的對應 -->
<id property="deptId" column="dept_id"></id>
<!--非主鍵欄位的對應-->
<result property="deptName" column="dept_name"></result>
</resultMap>
<!-- 查詢所有 -->
<select id="findAll" resultMap="userMap">
<!--select id as userId,username as userName,address as userAddress,sex as userSex,birthday as userBirthday from user;-->
select * from tbl_dept;
</select>
<!-- 儲存使用者 -->
<insert id="saveUser" parameterType="user">
<!-- 配置插入操作後,獲取插入資料的id
keyProperty 實體類的id
-->
<selectKey keyProperty="deptId" keyColumn="dept_id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into tbl_dept(dept_name)values(#{deptName});
</insert>
<!-- 更新使用者 -->
<update id="updateUser" parameterType="USER">
update tbl_dept set dept_name=#{deptName} where dept_id=#{deptId}
</update>
<!-- 刪除使用者-->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from tbl_dept where dept_id = #{deptId}
</delete>
<!-- 根據id查詢使用者 -->
<select id="findById" parameterType="INT" resultMap="userMap">
select * from tbl_dept where dept_id = #{deptId}
</select>
<!-- 根據名稱模糊查詢 -->
<select id="findByName" parameterType="string" resultMap="userMap">
select * from tbl_dept where dept_name like #{deptName}
<!-- select * from user where username like '%${value}%'-->
</select>
<!-- 獲取使用者的總記錄條數 -->
<select id="findTotal" resultType="int">
select count(dept_id) from tbl_dept;
</select>
<!-- 根據queryVo的條件查詢使用者 -->
<select id="findUserByVo" parameterType="com.yang.domain.QueryVo" resultMap="userMap">
select * from tbl_dept where dept_name like #{user.deptName}
</select>
</mapper>
測試類
package com.yang.test.test;
import com.yang.dao.IUserDao;
import com.yang.domain.QueryVo;
import com.yang.domain.User;
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.InputStream;
import java.util.List;
public class MybatisTest {
private InputStream in;
private SqlSession sqlSession;
private IUserDao userDao;
@Before//用於在測試方法執行之前執行
public void init()throws Exception{
//1.讀取配置檔案,生成位元組輸入流
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.獲取SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.獲取SqlSession物件
sqlSession = factory.openSession();
//4.獲取dao的代理物件
userDao = sqlSession.getMapper(IUserDao.class);
}
@After//用於在測試方法執行之後執行
public void destroy()throws Exception{
//提交事務
sqlSession.commit();
//6.釋放資源
sqlSession.close();
in.close();
}
/**
* 測試查詢所有
*/
@Test
public void testFindAll(){
//5.執行查詢所有方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
}
/**
* 測試儲存操作
*/
@Test
public void testSave(){
User user = new User();
user.setDeptName("modify User property");
System.out.println("儲存操作之前:"+user);
//5.執行儲存方法
userDao.saveUser(user);
System.out.println("儲存操作之後:"+user);
}
/**
* 測試更新操作
*/
@Test
public void testUpdate(){
User user = new User();
user.setDeptId(2);
user.setDeptName("update user");
//5.執行儲存方法
userDao.updateUser(user);
}
//
/**
* 測試刪除操作
*/
@Test
public void testDelete(){
//5.執行刪除方法
userDao.deleteUser(5);
}
/**
*
*/
@Test
public void testFindOne(){
//5.執行查詢一個方法
User user = userDao.findById(2);
System.out.println(user);
}
/**
* 測試模糊查詢操作
*/
@Test
public void testFindByName(){
//5.執行查詢一個方法
List<User> users = userDao.findByName("%m%");
// List<User> users = userDao.findByName("王");
for(User user : users){
System.out.println(user);
}
}
/**
* 測試查詢總記錄條數
*/
@Test
public void testFindTotal(){
//5.執行查詢一個方法
int count = userDao.findTotal();
System.out.println(count);
}
/**
* 測試使用QueryVo作為查詢條件
*/
@Test
public void testFindByVo(){
QueryVo vo = new QueryVo();
User user = new User();
user.setDeptName("%m%");
vo.setUser(user);
//5.執行查詢一個方法
List<User> users = userDao.findUserByVo(vo);
for(User u : users){
System.out.println(u);
}
}
}