MyBatis註解方式與映射文件方式配合實現一對一,一對多,多對多(一)

作者的個人分享網:分享時刻【www.itison.cn】

MyBatis註解方式與xml文件方式配合實現單表操作、一對一

首先,配置文件configuration.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>
	
	<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/test" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper class="com.mybatisdemo1.dao.UserDao" /> 
	</mappers>
	
</configuration>

用註解的方式進行單表操作非常簡單,以下是一個單表操作的實例,這種簡單的單表操作直接寫註解就可以,不需要進行配置resultMap映射結果集,甚至可以不需要UserDao.xml文件(但是如上在configuration.xml中映射的不是resource,而是class),增刪改都是類似的相應的sql語句加上傳參。
數據映射接口UserDao.java如下

package com.mybatisdemo1.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import com.mybatisdemo1.bean.Page;
import com.mybatisdemo1.bean.User;

/**
 * 數據訪問接口
 * @author LIU
 * @version 1.0 2017-11-6
 */
public interface UserDao {

	/**
	 * 用參數傳參
	 *TODO
	 *LIU
	 * @param userId
	 * @return
	 *下午1:11:10
	 */
	@Select("select * from user where id=#{id}")
	public User getUserById(@Param("id") int id);
	
	/**
	 * 用對象傳參
	 *TODO
	 *LIU
	 * @param user
	 * @return
	 *下午1:10:37
	 */
	@Select("select * from user where id=#{id}")
	public User getUserByUser(User user);
	
	/**
	 * 查詢所有
	 *TODO
	 *LIU
	 * @return
	 *下午1:10:31
	 */
	@Select("select * from user")
	public List<User> getUser();
	
	
	/**
	 * 分頁查詢
	 *TODO
	 *LIU
	 * @param min
	 * @param max
	 * @return
	 *下午1:04:28
	 */
	@Select("select * from user limit #{start},#{currCount}")
	public List<User> getUser2(Page page);
	
}


測試單表查詢的結果:

package com.mybatisdemo1.test;

import java.io.IOException;
import java.io.InputStream;

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 com.mybatisdemo1.bean.User;
import com.mybatisdemo1.dao.UserDao;

/**
 * 測試類
 * @author LIU
 * @version 1.0 2017-11-6
 */
public class Test {
	
	public static void main(String[] args) {
		InputStream resourceAsStream;
		try {
			//  讀取配置文件mybatis.xml
			resourceAsStream = Resources.getResourceAsStream("configuration.xml");
			//  將配置文件給mybatis
			SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
			
			//  根據配置文件獲取到一個sqlSession做數據庫持久化
			SqlSession sqlSession = build.openSession();
			//  操作UserDao
			UserDao mapper = sqlSession.getMapper(UserDao.class);
			User user = mapper.getUserById(1);
			
			System.out.println(user.toString());
		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

在測試的過程中,log4j.properties只是用於打印日誌,可以看到執行過程和結果
log4j.properties如下:

# Rules reminder:
# DEBUG < INFO < WARN < ERROR < FATAL

# Global logging configuration
log4j.rootLogger=DEBUG, stdout

# My logging configuration...
log4j.logger.org.mybatis.jpetstore=DEBUG

## Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n

一對一查詢的時候在調用方法的時候只需要調用getUser2(int id)方法,但是插入的時候必須要先調用addIdcard(IdCard i)插入idCard表,後調用addUser2(User2 u2)插入person表
註解方式實現一對一:

package com.mybatisdemo1.dao;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import com.mybatisdemo1.bean.IdCard;
import com.mybatisdemo1.bean.User2;

/**
 * 數據訪問接口
 * @author LIU
 * @version 1.0 2017-11-6
 */
public interface User2Dao {

	/**
	 * 一對一的查詢
	 *TODO
	 *LIU
	 * @param id
	 * @return
	 *下午3:29:11
	 */
	@Select("select * from user where id = #{id}")
	@Results(
		{
			@Result(column="id",property="id",id=true),
			@Result(column="userName",property="userName"),
			@Result(column="password",property="password"),
			@Result(column="cardId",property="idCard",one=@One(select="getIdCard"))
		}
	)
	public User2 getUser2(int id);
	
	@Select("select * from idCard where id = #{cardId}")
	@Results(
		{
			@Result(column="id",property="cardId",id=true),
			@Result(column="num",property="num")
		}
	)
	public IdCard getIdCard();
	
	
	
	
	/**
	 * 聯表一對一插入
	 *TODO
	 *LIU
	 * @param i
	 *下午3:28:27
	 */
	@Insert("insert into idcard (num) VALUES (#{num})")
	@Options(useGeneratedKeys=true,keyProperty="card_id")
	public void addIdcard(IdCard i);
	
	@Insert("insert into user(userName,password,cardId) VALUES (#{username},#{age},#{idCard.cardId})")
	@Options(useGeneratedKeys=true,keyProperty="id")
	public void addUser2(User2 u2);
	
	
}

測試項目目錄結構:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章