Mybatis_3.基於註解的增刪改查
阿新 • • 發佈:2019-01-04
1.實體類User.java
public class User {
private int id;
private String name;
private int age;
//getter、setter...
}
2.介面類UserMapper.java
public interface UserMapper { //新增 @Insert("insert into users (name,age) values (#{name},#{age})") public int addUser(User user) throws Exception; //刪除 @Delete("delete from users where id = #{id}") public void deleteUser(int id) throws Exception; //修改 @Update("update users set name=#{name},age=#{age} where id=#{id}") public void updateUser(User user) throws Exception; //查詢 @Select("select * from users where id = #{id}") public User queryUser(int id) throws Exception; //查詢所有的使用者 @Select("select * from users") public List<User> queryAllUser() throws Exception; }
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> <!-- 基於註解的增刪改查,註冊介面,注意Mapper標籤的屬性為class,引入xml檔案是resource --> <mapper class="com.test.withAnno.UserMapper"/> </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 下午9:05:14 * 類說明 */ public class Test { public static void main(String[] args) { addUser(); //deleteUser(); //updateUser(); //queryUser(); //queryAllUser(); } //新增 public static void addUser() { SqlSession session = DBUtil.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User u = new User("張三",21); try { mapper.addUser(u); session.commit(); System.out.println(u.toString()); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally{ session.close(); } } //刪除 public static void deleteUser() { SqlSession session = DBUtil.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); try { mapper.deleteUser(2); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally{ session.close(); } } //修改 public static void updateUser() { SqlSession session = DBUtil.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); try { User user = new User(3,"Tom",24); mapper.updateUser(user); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally{ session.close(); } } //查詢 public static void queryUser() { SqlSession session = DBUtil.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); try { User user = mapper.queryUser(4); session.commit(); System.out.println(user.toString()); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally{ session.close(); } } //查詢所有 public static void queryAllUser() { SqlSession session = DBUtil.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); try { List<User> users = mapper.queryAllUser(); session.commit(); System.out.println(users); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally{ session.close(); } } }
6.注意:
註解和XML檔案的差別不大,注意配置檔案中引入是的屬性
異常問題
1.Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允許有內容。
原因:為mybatis.cfg.xml裡註冊UserMapper.xml檔案時,路徑錯誤
2.Cause: org.xml.sax.SAXParseException; lineNumber: 27; columnNumber: 40; 需要屬性 "name", 並且必須為元素型別 "package" 指定該屬性。
原因:在配置檔案中引入對映檔案,忘記將介面類引入到配置檔案中,所以新手的話需要按照教程一步一來
3.Caused by: org.xml.sax.SAXParseException; lineNumber: 29; columnNumber: 13; 與元素型別 "id" 相關聯的屬性 "{1}" 應有左引號。
原因:對映檔案29行少一個左引號
4.Type interface com.test.mapper.UserMapper is already known to the MapperRegistry.
原因:在對映檔案的節點<mapper>中配置了的namespace,同時在配置檔案中又引入了這個介面