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); }
测试项目目录结构:
相关文章推荐
- MyBatis注解方式与映射文件方式配合实现一对一,一对多,多对多(二)
- MyBatis注解方式与映射文件方式配合实现一对一,一对多,多对多(三)
- MyBatis中映射文件和注解的关系查询(一对一,一对多,多对多)
- 使用注解方式实现mybatis一对多
- mybatis用注解实现 一对一,一对多,多对多哟
- springboot整合mybatis(映射文件方式和注解方式)
- MyBatis模糊查询(注解方式+映射文件方式)
- Hibernate 基于注解的方式 实现的关系映射案例(一对一关系,一对多关系,多对多关系)
- mybatis 一对一的映射(两种方式)
- 使用proc文件映射的方式实现用户态跟内核态的数据交互
- hibernate注解方式实现一对多映射
- Hibernate映射文件配置(hbm.xml和注解方式)
- mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
- springMVC 注解方式实现全程+文件上传
- Hibernate 一对一双向映射 注解方式
- mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
- springMVC 注解方式实现全程+文件上传
- springMVC 注解方式实现全程+文件上传
- 两种方式(系统调用、映射)实现文件的创建、移动、合并
- springMVC 注解方式实现文件上传