Mybatis_2.基於XML的增刪改查
阿新 • • 發佈:2019-01-01
1.實體類User.java
public class User {
private int id;
private String name;
private int age;
//getter、setter...
}
2.對映檔案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.test.withXml.UserMapper"> <!-- 自定義結果集 --> <resultMap type="com.test.bean.User" id="userMap"> <id property="id" column="id" javaType="java.lang.Integer"/> <result property="name" column="name" javaType="java.lang.String"/> <result property="age" column="age" javaType="java.lang.Integer"/> </resultMap> <!-- 增刪改查標籤的id屬性必須和介面中的方法名相同, id屬性值必須是唯一的,不能夠重複使用, parameterType屬性表示形參引數型別, resultType屬性表示查詢時返回的結果集型別 --> <!-- userGeneratedKeys(僅對insert有用),會告訴Mybatis使用JDBC的getGeneratedKeys方法來取出由MySQL內部生成的主鍵, 預設值false。 keyProperty(僅對insert有用)標記一個屬性,mybatis會通過getGeneratedKey或者通過insert語句的selectKey子元素設定值 預設不設定。 --> <insert id="addUser" useGeneratedKeys="true" keyProperty="id" parameterType="com.test.bean.User"> insert into users (name,age) values (#{name},#{age}) </insert> <delete id="deleteUser" parameterType="int"> delete from users where id = #{id} </delete> <update id="updateUser" parameterType="com.test.bean.User"> update users set name=#{name},age=#{age} where id=#{id} </update> <select id="queryUser" parameterType="int" resultType="com.test.bean.User" > select * from users where id = #{id} </select> <select id="queryAllUser" resultMap="userMap"> select * from users </select> <select id="queryBuyName" parameterType="String" resultMap="userMap"> select * from users where name like #{name} </select> </mapper>
3.全域性配置檔案mybatis.cfg.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="mysql.properties"></properties> <!-- 配置mybatis執行環境,development:開發模式,work:工作模式--> <environments default="development"> <environment id="development"> <!-- type=“jdbc”表示使用JDBC的提交和回滾來管理事務 --> <transactionManager type="JDBC" /> <!-- mybatis提供了三種資料來源型別,POOLED,UNPOOLED,JNDI --> <!-- POOLED:表示支援JDBC資料來源的連線池 --> <!-- UNPOOLED:表示不支援JDBC資料來源的連線池 --> <!-- JNDI:表示支援外部資料來源連線池 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <mappers> <!-- 基於xml對映檔案的增刪改查,註冊對映檔案 --> <mapper resource="com/test/withXml/userMapper.xml"/> </mappers> <!-- 為實體類定義別名,簡化sql對映xml檔案中的引用 --> <!-- <typeAliases> <typeAlias type="com.test.bean.User" alias="_User"/> </typeAliases> --> </configuration>
4.資料庫配置檔案mysql.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis1?useUincode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
5.測試類
/** * @author:滕鵬飛 * @version: 1.0 * @Created on: 2018-9-2 下午8:32:54 * 類說明:基於XML檔案 */ public class Test { public static void main(String[] args) { //addUser(); //delete(); //update(); //query(); queryBuyName(); } /** * 新增資料 */ public static void addUser(){ SqlSession sqlSession = DBUtil.getSession(); User user = new User("張三三", 21); sqlSession.insert("com.test.withXml.UserMapper.addUser",user); sqlSession.close(); } /** * 刪除資料 */ public static void delete(){ SqlSession sqlSession = DBUtil.getSession(); sqlSession.delete("com.test.withXml.UserMapper.deleteUser","3"); sqlSession.close(); } /** * 修改資料 */ public static void update(){ SqlSession sqlSession = DBUtil.getSession(); User user = new User(5,"張三三", 21); sqlSession.update("com.test.withXml.UserMapper.updateUser", user); sqlSession.close(); } /** * 查詢資料 */ public static void query(){ SqlSession sqlSession = DBUtil.getSession(); User user = sqlSession.selectOne("com.test.withXml.UserMapper.queryUser", 4); System.out.println(user); } /** * 根據name進行模糊查詢 */ public static void queryBuyName(){ SqlSession sqlSession = DBUtil.getSession(); List<User> user = sqlSession.selectList("com.test.withXml.UserMapper.queryBuyName", "%三%"); System.out.println(user); } }
注意:
1.若使用自定義結果集則使用結果集的屬性為resultMap,不是resultType,若使用全類名則使用resultType
2.入參:
parameterType:可以是類,需要寫全類名,也可以是基本資料型別
出參:
自定義型別:resultMap
指定型別:resultType
3.自動提交事務:
1.sessionFactory.openSession(true);
2.session.commit();該方式增刪改都必須新增,查詢可以不用
4.若同時使用XML檔案對映SQL和對映檔案對應的介面,比如UserMapper.java和userMapper.xml,若在對映檔案中使用namespace屬性,則在配置檔案中就不需要在引入,否則需要同時引入介面類和對映檔案,namespace命名規範:對映檔案所在路徑+對映檔名。
5.表字段的名稱和類屬性的名稱不一致的情況
解決辦法一: 通過在查詢的sql語句中定義欄位名的別名,讓欄位名的別名和實體類的屬性名一致,這樣就可以表的欄位名和實體類的屬性名一一對應上了,這種方式是通過在sql語句中定義別名來解決欄位名和屬性名的對映關係的。
select t_id id, t_name name from teacher where t_id = #{id}
解決辦法二: 通過<resultMap>來對映欄位名和實體類屬性名的一一對應關係。這種方式是使用MyBatis提供的解決方式來解決欄位名和屬性名的對映關係的。
<resultMap type="com.test.bean.User" id="userMap">
<id property="id" column="id" javaType="java.lang.Integer"/>
<result property="name" column="name" javaType="java.lang.String"/>
<result property="age" column="age" javaType="java.lang.Integer"/>
</resultMap>