Mybatis實現增刪改查、模糊查詢、多條件查詢
阿新 • • 發佈:2018-11-09
專案總體結構如下:
資料庫準備:在 資料庫dbmybatis中建立一張category的表,我錄入了幾條記錄方便測試,表字段結構如下圖:
1.建立好了表後使用idea新建一個Maven專案,pom.xml加入如下依賴:
<dependencies> <!--資料庫連線驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> <!--配置編譯原始碼的jdk版本--> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
2.resources下建立mybatis的配置檔案mybatis-config.xml。
設定別名是為了在具體的mapper.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> <!--設定別名--> <package name="com.byh.pojo"/> </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/dbmybatis?characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="admin"/> </dataSource> </environment> </environments> <!--掃描mapper檔案--> <mappers> <mapper resource="mapper/CategoryMapper.xml"/> </mappers> </configuration>
3.建立實體Category.java。
package com.byh.pojo; public class Category { private int id; private String name; 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; } @Override public String toString() { return "Category{" + "id=" + id + ", name='" + name + '\'' + '}'; } }
4.建立CategoryMapper.xml.其中編寫了對category表的增刪改查、模糊、多條件查詢的語句。
注意:namespace的值是自己專案中所對應的mapper.java介面。一定不能寫錯。
<?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.byh.mapper.CategoryMapper"> <insert id="addCategory" parameterType="Category" > insert into category ( name ) values (#{name}) </insert> <delete id="delCategory" parameterType="Category" > delete from category where id= #{id} </delete> <update id="updateCategory" parameterType="Category" > update category set name=#{name} where id=#{id} </update> <select id="getCategory" parameterType="_int" resultType="Category"> select * from category where id= #{id} </select> <select id="listCategory" resultType="Category"> select * from category </select> <select id="listCategoryByName" parameterType="string" resultType="Category"> select * from category where name like concat('%',#{0},'%') </select> <select id="listCategoryByIdAndName" parameterType="map" resultType="Category"> select * from category where id > #{id} and name like concat('%',#{name},'%') </select> </mapper>
5.然後寫對應的介面CategoryMapper 。
這裡介面中的方法有如下規定:
(1)方法名和對應的mapper配置檔案中查詢語句的id相同
(2)返回型別和resultType的型別一致,沒有就是void。
(3)方法中的引數列表中的型別和parameterType一致。
(4)mapper配置檔案的namespace對應mapper介面類的全路徑。
package com.byh.mapper; import com.byh.pojo.Category; import java.util.List; import java.util.Map; public interface CategoryMapper { void addCategory(Category category); void delCategory(Category category); void updateCategory(Category category); void getCategoryById(int id); List<Category> listCategory(); List<Category> listCategoryByName(String name); List<Category> listCategoryByIdAndName(Map<String,Object> map); }
6.建立測試。下面貼出了完整的增刪改查、模糊、多條件查詢的測試通過的程式碼:
import com.byh.mapper.CategoryMapper; import com.byh.pojo.Category; 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.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; public class Demo1 { private SqlSession session ; private CategoryMapper categoryMapper; @Before public void bef() throws IOException { //mybatis的配置檔案 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //構建sqlSession的工廠 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //建立能執行對映檔案中sql的sqlSession session=sqlSessionFactory.openSession(); categoryMapper = session.getMapper(CategoryMapper.class); } /** * 關閉SqlSession的方法 * @param session */ public void close(SqlSession session){ session.commit(); session.close(); } /* 1. 程式向找Mybatis找資料 2. mybatis從資料庫中: (1).通過mybatis-config.xml 定位是哪個資料庫, (2).通過Category.xml執行對應的select語句 (3).基於Category.xml把返回的資料庫記錄封裝在Category物件中 (4).把多個Category物件裝在一個Category集合中 這樣找到資料 3. 返回一個Category集合 */ @Test //查詢所有 public void findAll() throws IOException { List<Category> cs=categoryMapper.listCategory(); for (Category c : cs) { System.out.println(c.getName()); } } @Test //增加 public void add() throws IOException { Category c = new Category(); c.setName("我是新增的分類"); categoryMapper.addCategory(c); findAll(); //提交和關閉,呼叫自定義方法 close(session); } @Test //刪除 public void del() throws IOException { findAll(); System.out.println("------------刪除後-----------"); Category c = new Category(); c.setId(5); categoryMapper.delCategory(c);//這裡的5是一個數據庫存在的id findAll(); close(session); } @Test //更新 public void update() throws IOException { findAll(); System.out.println("------------更新後-----------"); Category c = session.selectOne("getCategory",2);//查詢單個物件 c.setName("分類2被修改了a"); categoryMapper.updateCategory(c); findAll(); close(session); } @Test //模糊查詢 public void like() throws IOException { findAll(); System.out.println("------------模糊查詢-----------"); //返回符合條件的結果集 List<Category> cs=categoryMapper.listCategoryByName("了"); for (Category c : cs) { System.out.println(c.getName()); } } @Test //多條件 public void moreLike() throws IOException { findAll(); //這裡查詢的是id大於1並且分類的name中帶有數字2的記錄,為了直觀,建議資料庫多錄入幾條資料測試 Map<String,Object> params = new HashMap<>(); params.put("id", 1); params.put("name", "2"); List<Category> cs = categoryMapper.listCategoryByIdAndName(params); System.out.println("------------多條件-----------"); for (Category c : cs) { System.out.println(c.getName()); } } }