mybatis映射配置文件,MyBatis 使用什么方式来配置和映射原生信息-

  mybatis映射配置文件,MyBatis 使用什么方式来配置和映射原生信息?

  00-1010一、配置文件内容1.1、属性1.2、设置1.3、类型别名1.4、映射器Mappers1.5、数据源1.6、事务2、关系映射2.1、一对一映射2.2、Mybatis中的一对多映射。

  

目录

Mybatis.xml是Mybatis的全局配置文件。

 

  全局配置文件需要在头文件中使用约束文件。

  ?xml版本=1.0 编码=UTF-8 ?配置文件doctype configuration public -//mybatis . org//dtd config 3.0//en 3358mybatis.org/dtd/mybatis-3-config.dtd的顶层结构如下:

  配置属性-属性3360加载外部配置文件,例如数据库的连接信息设置-全局配置参数3360,例如日志配置类型别名-类型别名类型处理程序-类型处理器对象工厂-对象工厂插件-插件:例如分页插件环境-环境集合属性对象环境(环境变量)事务管理器(事务管理器)数据源(数据源)映射器-映射器:注册映射文件

  00-1010属性可以在外部配置,并且可以动态替换。我们可以在properties元素的子元素中设置它(比如Datasource中的properties节点),或者在java属性文件中配置它。

  数据源中有四个参数数据连接到数据库,我们通常把它们放在一个特殊的属性文件中。mybatis的全局配置文件直接从属性文件中读取数据。

  1.在资源目录中创建jdbc.properties。

  JDBC . driver=com . MySQL . CJ . JDBC . driver JDBC . URL=JDBC : MySQL ://127 . 0 . 0 . 1:3306/mybatis?server zone=utc character encoding=UTF-8 server time zone=Asia/Shanghai JDBC . username=root JDBC . password=123 @ qwe 2,mybatis.xml

  Properties= jdbc.properties/3。使用属性文件中的值。

  数据源类型=池化!-数据库连接的四个参数-属性名= driver value= $ { JDBC . driver } /属性名= url value= $ {jdbc.url}/属性名=用户名 value=${jdbc.username}/属性名=密码 value= $ { JDBC . password } //data source

  00-1010 Mybatis中极其重要的调整设置,会改变Mybatis的运行行为,比如日志。

  !-配置日志-设置设置名称= logimpl 值= log4j//settings

  00-1010您可以为java类型设置缩写别名,该别名仅用于xml配置,旨在减少冗余的全限定类名书写。MyBatis已经支持一些常见的别名类型,如下所示:

  alias _ bytebyte _ longlong _ short short _ int int _ integer类型

  rint_doubledouble_floatfloat_booleanbooleanstringStringbyteBytelongLongshortShortintIntegerintegerIntegerdoubleDoublefloatFloatbooleanBooleandateDatedecimalBigDecimalbigdecimalBigDecimalobjectObjectmapMaphashmapHashMaplistListarraylistArrayListcollectionCollectioniteratorIterator也支持自定义别名:

  

 <typeAliases> <!-- 对单个实体类定义别名 --> <typeAlias type="com.jsonliu.test.entity.Users" alias="Users" /> <!-- 推荐:批量定义别名,扫描指定包下所有类,同时别名定义为类名,别名首字母大小写都可以 --> <package name="com.jsonliu.test.entity"/> </typeAliases>

 

  

1.4、映射器Mappers

1.4.1、使用相对于类路径的资源引用

 

  语法:<mapper resource="">使用相对于类路径的资源,从classpath路径查找文件例如:<mapper resource="com/jsonliu/test/entity/Team.xml"/>

  1.4.2、使用映射器接口实现类的完全限定类名

  语法:<mapper class="">要求:接口和映射文件同包同名<mapper class="com.jsonliu.test.mapper.UsersMapper"/>

  1.4.3、将包内映射器接口全部注册为映射器

  推荐

  语法:<package name="">指定包下的所有mapper接口例如:<package name="com.jsonliu.test.mapper"/>注意:此种方法要求Mapper接口名称和mapper映射文件名称相同,且在同一个目录中

  

 

  

1.5、dataSource

Mybatis中访问数据库支持连接池技术,而且采用的自己的连接池技术。在mybatis.xml文件中进行配置,根据type属性创建相应类型数据源DataSource。Mybatis数据源分三类:

 

  UNPOOLED:不使用连接池数据源POOLED:使用连接池数据源JNDI:使用JNDI实现的数据源前两个数据源都实现了javax.sql.Datasource接口

  

 

  

 

  

1.6、事务

默认手动提交事务:

 

  Mybatis框架是对JDBC的封装,所以Mybatis事务的控制方式本身也是用JDBC的connection对象的commit()、rollback()方法,connection对象的setAutoCommit()设置事务提交方式为手动或者自动。

  

<!-- 事务类型:使用JDBC事务,使用connection提交和回滚 --> <transactionManager type="JDBC" />

transactionManager 指定Mybatis所用事务管理器,支持:JDBC与MANAGED

 

  JDBC事务管理机制,通过Connection对象的commit()方法提交,rollback()方法回滚。默认情况下Mybatis将关闭自动提交功能,观察日志可以看出,提交或者回滚都需要我们手动设置。

  

 

  MANAGED:由容器来管理事务的整个生命周期(如Spring容器)

  SqlSessionFactory的openSession()方法存在重载,可以设置自动提交方式。如果sqlSession = SqlSessionFactory.openSession(true);参数设置为true,再次执行增删改不需要执行sqlSession.commit(),事务会自动提交。

  

 

  

二、Mybatis中的关系映射

表结构如下:

 

  

 

  

 

  

2.1、一对一映射

添加实体类Player:

 

  

public class Player { private Integer playerId; private String playerName; private Integer playerNum; private Integer teamId; private Team team1; public Player() { } public Player(Integer playerId, String playerName, Integer playerNum, Integer teamId) { this.playerId = playerId; this.playerName = playerName; this.playerNum = playerNum; this.teamId = teamId; } @Override public String toString() { return "Player{" + "playerId=" + playerId + ", playerName=" + playerName +  + ", playerNum=" + playerNum + ", teamId=" + teamId + ", team1=" + team1 + }; } public Integer getPlayerId() { return playerId; } public void setPlayerId(Integer playerId) { this.playerId = playerId; } public String getPlayerName() { return playerName; } public void setPlayerName(String playerName) { this.playerName = playerName; } public Integer getPlayerNum() { return playerNum; } public void setPlayerNum(Integer playerNum) { this.playerNum = playerNum; } public Integer getTeamId() { return teamId; } public void setTeamId(Integer teamId) { this.teamId = teamId; } public Team getTeam1() { return team1; } public void setTeam1(Team team1) { this.team1 = team1; }}

Mapper接口:

 

  

public interface PlayerMapper { Player queryById(int playerId); Player queryById1(int playerId); Player queryById2(int playerId); Player queryById3(int playerId);}

Mapper映射文件:

 

  

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.jsonliu.test.mapper.PlayerMapper"> <select id="queryById" resultType="player"> select * from player where playerId=#{playerId} </select> <select id="queryById1" resultMap="joinTeamResult1"> select * from player a inner join team b on a.teamId=b.teamId where a.playerId=#{playerId} </select> <select id="queryById2" resultMap="joinTeamResult2"> select * from player a inner join team b on a.teamId=b.teamId where a.playerId=#{playerId} </select> <select id="queryById3" resultMap="joinTeamResult3"> select * from player where playerId=#{playerId} </select> <resultMap id="baseResultMap" type="player"> <id property="playerId" column="playerId" ></id> <result property="playerName" column="playerName"></result> <result property="playerNum" column="playerNum"></result> <result property="teamId" column="teamId"></result> </resultMap> <!-- 方式一:关联对象.属性,要求连接查询。 extends=表示继承其他的resultMap的ID --> <resultMap id="joinTeamResult1" type="player" extends="baseResultMap"> <id property="team1.teamId" column="teamId"></id> <result property="team1.teamName" column="teamName"></result> <result property="team1.location" column="location"></result> <result property="team1.createTime" column="createTime"></result> </resultMap> <!-- 方式二:直接引用关联对象的mapper映射,要求连接查询。 property=关联对象的属性名 javaType=关联对象的类型 resultMap=关联对象命名空间中的resultMap--> <resultMap id="joinTeamResult2" type="player" extends="baseResultMap"> <association property="team1" javaType="team" resultMap="com.jsonliu.test.mapper.TeamMapper.baseResultMap"/> </resultMap> <!-- 方式三:直接引用关联对象的查询方法,要求关联对象的mapper中必须有单独的查询方法。 property=关联对象的属性名 javaType=关联对象的类型 select=关联对象的单独查询语句 column=外键列 --> <resultMap id="joinTeamResult3" type="player" extends="baseResultMap"> <association property="team1" javaType="team" select="com.jsonliu.test.mapper.TeamMapper.queryById" column="teamId"/> </resultMap> </mapper>

测试类:

 

  

public class PlayerMapperTest { private PlayerMapper mapper=MybatisUtil.getSqlSession().getMapper(PlayerMapper.class); @Test public void test1(){ Player player = mapper.queryById1(1); System.out.println(player); } @Test public void test2(){ Player player = mapper.queryById2(1); System.out.println(player); } @Test public void test3(){ Player player = mapper.queryById3(1); System.out.println(player); } }

 

  

2.2、一对多映射

修改实体类Team.java:

 

  

public class Team { /** * 球队ID */ private Integer teamId; /** * 球队名称 */ private String teamName; /** * 球队地址 */ private String location; /** * 创立时间 */ private Date createTime; /** * 队员集合 */ private List<Player> playerList; ...}

TeamMapper接口中添加方法:

 

  

 Team queryById1(int teamId); Team queryById2(int teamId);

PlayerMapper接口中添加方法:

 

  

 List<Player> queryByTeamId(int teamId);

TeamMapper.xml中添加映射:

 

  

 <!-- 方式一:使用collection,property=关联对象集合名称,javaType=关联对象集合类型,ofType=关联对象集合的泛型, resultMap=引起关联对象的结果映射 --> <resultMap id="joinResult1" type="team" extends="baseResultMap"> <collection property="playerList" javaType="arrayList" ofType="Player" resultMap="com.jsonliu.test.mapper.PlayerMapper.baseResultMap"/> </resultMap> <!-- 方式一:使用collection,property=关联对象集合名称,javaType=关联对象集合类型,ofType=关联对象集合的泛型, select=引起关联对象的单独查询方法,使用的前提是关联对象中该方法可用 column=引起关联对象的单独查询方法的参数,一般是外键--> <resultMap id="joinResult2" type="team" extends="baseResultMap"> <collection property="playerList" javaType="arrayList" select="com.jsonliu.test.mapper.PlayerMapper.queryByTeamId" column="teamId"/> </resultMap>

PlayerMapper.xml中添加映射:

 

  

 <select id="queryByTeamId" resultType="player"> select * from player where teamId=#{teamId} </select>

测试类中添加测试方法:

 

  

 @Test public void test13(){ TeamMapper mapper = sqlSession.getMapper(TeamMapper.class); Team team = mapper.queryById1(1025); System.out.println(team); } @Test public void test14(){ TeamMapper mapper = sqlSession.getMapper(TeamMapper.class); Team team = mapper.queryById2(1025); System.out.println(team); }

到此这篇关于Mybatis全局配置及映射关系的实现的文章就介绍到这了,更多相关Mybatis全局配置及映射关系内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: