1. 程式人生 > >Mybatis_3.基於註解的增刪改查

Mybatis_3.基於註解的增刪改查

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,同時在配置檔案中又引入了這個介面