您的位置:首页 > 其它

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

2017-11-06 12:42 731 查看

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>


用注解的方
d18f
式进行单表操作非常简单,以下是一个单表操作的实例,这种简单的单表操作直接写注解就可以,不需要进行配置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);

}


测试项目目录结构:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: