Mybatis的⼀对⼀查询(xml⽂件⽅式的实现)
⼀、Mapper 接⼝开发需要遵循以下规范:(图中是接⼝和xml⽂件的详细映射关系)
1) l⽂件中的namespace与mapper接⼝的全限定名相同
2) Mapper接⼝⽅法名和l中定义的每个statement的id相同
3) Mapper接⼝⽅法的输⼊参数类型和l中定义的每个sql的parameterType的类型相同
4) Mapper接⼝⽅法的输出参数类型和l中定义的每个sql的resultType的类型相同
⼆、Mybatis的具体使⽤(数据层mybatis单独使⽤)
1.Mybatis的配置⽂件l(此处的jdbc.properties⽂件省略\⽇志⽂件省略)
<?xml version="1.0" encoding="UTF-8" ?>
<!--MyBatis的DTD约束-->
<!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN" "/dtd/mybatis-3-config.dtd">
<!--configuration 核⼼根标签-->
<configuration>
<!--引⼊数据库连接的配置⽂件-->
<properties resource="jdbc.properties"/>
<!--配置LOG4J-->
<settings>
<setting name="logImpl" value="log4j"/>
</settings>
<!--起别名、bean下的是具体的实体类,这⾥起别名是为了在映射配置⽂件的时候,resultType可以直接写类的名字(第⼀个字母⼩写)不⽤写全类名-->
<typeAliases>
<package name="com.ithmy.bean"/>
</typeAliases>
<!--environments配置数据库环境,环境可以有多个。default属性指定使⽤的是哪个-->
<environments default="mysql">
<!--environment配置数据库环境 id属性唯⼀标识-->
<environment id="mysql">
<!-- transactionManager事务管理。 type属性,采⽤JDBC默认的事务-->
<transactionManager type="JDBC"></transactionManager>
<!-- dataSource数据源信息 type属性连接池-->
<dataSource type="POOLED">
<!-- property获取数据库连接的配置信息 -->
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- mappers引⼊映射配置⽂件 -->
<mappers>
<mapper resource="com/itheima/one_to_l"/>
</mappers>
</configuration>
2.⼀对⼀的实现:(card 中包含了person实体类)
实体类:card
package com.ithmy.bean;
public class Card {
private Integer id; //主键id
private String number; //⾝份证号
private Person p; //所属⼈的对象 *** 在表中是外键pid:⼈id,但是在javabean中⼀般都是外键对应的实体类javabean
//省略构造和set\get
}
实体类:person
package com.ithmy.bean;
public class Person {
private Integer id; //主键id
private String name; //⼈的姓名
private Integer age; //⼈的年龄
//省略构造和set\get
}
3.数据库配置⽂件:jdbc.properties(此配置必写)
sql.jdbc.Driver
url=jdbc:mysql://192.168.59.143:3306/db2
username=root
password=itheima
4.⽇志⽂件:log4j.properties(此配置可有可⽆,如果⽆,要把上⾯的mybatis配置⽂件中的⽇志配置项删除,不然会报错)
# Global logging configuration
# ERROR WARN INFO DEBUG
#
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j2xml配置log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
5.映射配置⽂件:新建_to_l(⼀对⼀操作)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-////DTD Mapper 3.0//EN"
"/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ithmy.table01.OneToOneMapper">
<!--配置字段和实体对象属性的映射关系
type指定要配置的实体对象是哪个:card
-->
<resultMap id="oneToOne" type="card">
<!--id配置主键列:将sql中查询的cid列与card实体类中的id进⾏关联 -->
<id column="cid" property="id" />
<!--result配置⾮主键列-->
<result column="number" property="number" />
<!--
association:配置被包含对象的映射关系
property:被包含对象的变量名(属性名,在Card实体类中有⼀个p属性)
javaType:被包含对象的数据类型(直接给person别名,因为我们通过typeAliases统⼀设置了bean包下所有实体类的别名了)
-->
<association property="p" javaType="person">
<id column="pid" property="id" />
<result column="name" property="name" />
<result column="age" property="age" />
</association>
</resultMap>
<!--resultMap属性指定的是resultMap标签的id
查询出来的结果涉及到两张表,所以不能使⽤resultType了,数据库中不区分⼤⼩写,如果有字段写成了⼤写或者⼩写与数据库中的列不⼀致是不会出错的
-->
<select id="selectAll" resultMap="oneToOne">
SELECT c.id cid,number,pid,name,age FROM card c,person p WHERE c.pid=p.id
</select>
</mapper>
6.编写实现接⼝:com.ithmy.table01.OneToOneMapper
package com.ithmy.table01;
import com.ithmy.bean.Card;
import java.util.List;
public interface OneToOneMapper {
//查询全部
public abstract List<Card> selectAll();
}
7.测试:Test
package com.ithmy.table01;
import com.ithmy.bean.Card;
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 org.junit.Test;
import java.io.InputStream;
import java.util.List;
public class Test01 {
@Test
public void selectAll() throws Exception{
//1.加载核⼼配置⽂件
InputStream is = ResourceAsStream("l");
//2.获取SqlSession⼯⼚对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); //3.通过⼯⼚对象获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//4.获取OneToOneMapper接⼝的实现类对象,mybatis的配置⽂件⾥引⼊了映射信息OneToOneMapper mapper = Mapper(OneToOneMapper.class);
//5.调⽤实现类的⽅法,接收结果
List<Card> list = mapper.selectAll();
//6.处理结果
for (Card c : list) {
System.out.println(c);
}
//7.释放资源
sqlSession.close();
is.close();
}
}
8.⼀对⼀操作总结:
<resultMap>:配置字段和对象属性的映射关系标签。
id 属性:唯⼀标识
type 属性:实体对象类型
<id>:配置主键映射关系标签。
<result>:配置⾮主键映射关系标签。
column 属性:表中字段名称
property 属性:实体对象变量名称
<association>:配置被包含对象的映射关系标签。
property 属性:被包含对象的变量名javaType 属性:被包含对象的数据类型
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论