MyBatis注解方式与映射文件方式配合实现一对一,一对多,多对多(一)

来源:互联网 发布:刷手淘宝号 编辑:程序博客网 时间:2024/06/05 02:08

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 configurationlog4j.rootLogger=DEBUG, stdout# My logging configuration...log4j.logger.org.mybatis.jpetstore=DEBUG## Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.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);}

测试项目目录结构:

这里写图片描述

阅读全文
1 0