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
- MyBatis注解方式与映射文件方式配合实现一对一,一对多,多对多(一)
- MyBatis注解方式与映射文件方式配合实现一对一,一对多,多对多(二)
- MyBatis注解方式与映射文件方式配合实现一对一,一对多,多对多(三)
- Hibernate 基于注解的方式 实现的关系映射案例(一对一关系,一对多关系,多对多关系)
- hibernate注解方式实现一对多映射
- hibernate注解方式实现一对多映射
- hibernate注解方式实现一对多映射
- hibernate注解方式实现一对多映射
- hibernate3注解方式实现一对多映射
- hibernate 注解方式,实现一对多映射
- hibernate注解方式实现一对多映射
- MyBatis一对多映射实现方式
- 使用注解方式实现mybatis一对多
- MyBatis关联表映射(一对多、多对多、一对一、多对一)
- mybatis中一对一、一对多、多对多的实现方式
- mybatis映射 一对一、一对多、多对多高级映射
- [MyBatis日记](6)一对一与一对多映射
- mybatis resaultMap 高级映射 (一对一,一对多,多对一,多对多)
- mysql组合更新
- Android OpenGL教程-第二课【转】
- 4.从Request中获取文件数据
- 结构体变量的引用
- 日常记录
- MyBatis注解方式与映射文件方式配合实现一对一,一对多,多对多(一)
- 排序算法学习经验(四)
- 【DFS】UVa839 天平(Not so Mobile)
- 图片剪裁批处理
- Spring boot介绍(一)
- 5.API中的文件上传与接收
- 莫名其妙CSDN不让我发帖子了。看来10年的老水手我该离开CSDN了。
- 6.JavaMail发送邮件
- 程序员不愿意加班的真相......