MyBatis一对一映射初识教程

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

一对一映射

在生活中,一对一的例子还是有的,比如啦,学生和身份证哦,或者在我国,实行的是一夫一妻制度哦。那么我们以学生和身份证每个学生只有一张身份证,而每张身份证的主人当然只有一个啦。

数据库脚本:

-- 删除数据库
drop database if exists mybaits;
-- 创建数据库
create database if not exists mybatis default character set utf8;
-- 选择数据库
use mybatis;
-- 删除数据表
drop table if exists student ;
drop table if exists card;
-- 创建数据表
create table card(
cid int(255),
num varchar(18),
constraint pk_cid primary key (cid)
);
create table student(
sid int(255),
sname varchar(32),
scid int(255),
constraint pk_sid primary key (sid),
constraint fk_scid foreign key (scid) references card(cid)
);
-- 增加测试数据
insert into card (cid,num) values(1,'123456789012345678');
insert into student (sid,sname,scid) values(1,'哈哈',1);

新建一个one2one.Card.java类

package one2one;
import java.io.Serializable;
/**
* 身份证
* @author Administrator
*
*/
@SuppressWarnings("serial")
public class Card implements Serializable{
private Integer cid;
private String num;
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
}

新建one2one.Student.java类

package one2one;
import java.io.Serializable;
/**
* 学生
* @author Administrator
*
*/
@SuppressWarnings("serial")
public class Student implements Serializable{
private Integer sid;
private String sname;
private Card card;
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
}

在one2one包下新建CardMapper.xml文件

<?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="cardNameSpace">
<resultMap type="one2one.Card" id="cardMap">
<id column="cid" property="cid"/>
<result column="num" property="num"/>
</resultMap>
</mapper>

同理,在one2one包下新建StudentMapper.xml文件

<?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="studentNameSpace">
<resultMap type="one2one.Student" id="studentMap">
<id column="sid" property="sid"/>
<result column="sname" property="sname"/>
<!-- 关联字段不要写 -->
</resultMap>
<select id="findById" parameterType="integer" resultMap="studentMap">
select s.sid,s.sname,c.cid,c.num
from student s,card c
where s.scid = c.cid and s.sid = #{sid}
</select>
</mapper>

在src下新建一个mybatis.cfg.xml文件,并包含StudentMapper.xml和CardMapper.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="mysql_developer">
<!-- 连接MySQL环境信息 -->
<environment id="mysql_developer">
<!-- MyBatis使用jdbc事务管理器 -->
<transactionManager type="jdbc"/>
<!-- MyBatis使用连接池方式来获取连接对象 -->
<dataSource type="pooled">
<!-- 配置与数据库交互的4个必要属性 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="mysqladmin"/>
</dataSource>
</environment>
<!-- 连接Oracle环境信息 -->
<environment id="oracle_developer">
<!-- MyBatis使用jdbc事务管理器 -->
<transactionManager type="jdbc"/>
<!-- MyBatis使用连接池方式来获取连接对象 -->
<dataSource type="pooled">
<!-- 配置与数据库交互的4个必要属性 -->
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="one2one/CardMapper.xml"/>
<mapper resource="one2one/StudentMapper.xml"/>
</mappers>
</configuration>

在util包下新建一个工具类MyBatisUtil.java类

package util;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
public static SqlSessionFactory sqlSessionFactory ;
//私有化构造方法
private MyBatisUtil(){}
//加载位于src/Mybatis.cfg.xml
static{
try {
Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取SQLSession
* @return
*/
public static SqlSession getSqlSession(){
//从当前线程中获取SqlSession对象
SqlSession sqlSession = threadLocal.get();
if(sqlSession == null){
if(sqlSessionFactory != null){
sqlSession = sqlSessionFactory.openSession();
//讲sqlSession与当前线程绑定在一起
threadLocal.set(sqlSession);
}
}
return sqlSession;
}
/**
* 关闭SqlSession 并与当前线程分开
*/
public static void closeSqlSession(){
//从当前线程中获取SqlSession对象
SqlSession sqlSession = threadLocal.get();
//如果SqlSession对象非空
if(sqlSession != null){
//关闭SqlSession对象
sqlSession.close();
//分离当前线程与SqlSession的关系
threadLocal.remove();
}
}
//测试
public static void main(String[] args) {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
Connection conn= sqlSession.getConnection();
System.out.println(conn != null ?"连接成功":"连接失败");
}
}

新建持久层类StuentCardDAO.java类

package one2one;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import util.MyBatisUtil;
/**
* 持久层
* @author Administrator
*
*/
public class StudentCardDAO {
/**
* 查询1号学生的信息与身份证信息
* @param id
* @return
* @throws Exception
*/
public Student findById(Integer id) throws Exception{
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtil.getSqlSession();
return sqlSession.selectOne("studentNameSpace.findById", id);
} catch (Exception e) {
e.printStackTrace();
throw e;
}finally{
MyBatisUtil.closeSqlSession();
}
}
//测试 查询1号学生的信息与身份证信息
@Test
public void testFindById() throws Exception{
StudentCardDAO dao = new StudentCardDAO();
Student student = dao.findById(1);
System.out.println(student.getSid()+":"+student.getSname() }
}

这时我们只能查询1号学生的姓名,但是我们不能去查询它的身份号号,因为此时的card属性的值为null,从StudentMapper.xml中可以看出

<select id="findById" parameterType="integer" resultMap="studentMap">

MyBatis在解析这一句的时候只能将查询的数据封装到sid,sname中,所以怎么办?

在StudentMapper.xml中的

<resultMap type="one2one.Card" id="cardMap">
<id column="cid" property="cid"/>
<result column="num" property="num"/>
</resultMap>

增加

<!--
引入CardMapper.xml文件中的映射信息
property表示Student的关联属性
-->
<association property="card" resultMap="cardNameSpace.cardMap"/>

那么此时的StudentMapper.xml的完整内容如下:

<?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="studentNameSpace">
<resultMap type="one2one.Student" id="studentMap">
<id column="sid" property="sid"/>
<result column="sname" property="sname"/>
<!--
引入CardMapper.xml文件中的映射信息
property表示Student的关联属性
-->
<association property="card" resultMap="cardNameSpace.cardMap"/>
</resultMap>
<select id="findById" parameterType="integer" resultMap="studentMap">
select s.sid,s.sname,c.cid,c.num
from student s,card c
where s.scid = c.cid and s.sid = #{sid}
</select>
</mapper>

现在可以测试学生的身份证号码了

将持久层类StuentCardDAO.java类的测试方法改为

//测试 查询1号学生的信息与身份证信息
@Test
public void testFindById() throws Exception{
StudentCardDAO dao = new StudentCardDAO();
Student student = dao.findById(1);
System.out.println(student.getSid()+":"+student.getSname()+":"+student.getCard().getNum());
}

同理

在StudentDAO.java类中增加 查询“哈哈”学生的信息与身份证信息的方法

/**
* 查询“哈哈”学生的信息与身份证信息
* @param name
* @return
* @throws Exception
*/
public Student findByName(String name) throws Exception{
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtil.getSqlSession();
return sqlSession.selectOne("studentNameSpace.findByName", name);
} catch (Exception e) {
e.printStackTrace();
throw e;
}finally{
MyBatisUtil.closeSqlSession();
}
}

并增加测试方法哦

//测试 查询“哈哈”学生的信息与身份证信息
@Test
public void testFindByName() throws Exception{
StudentCardDAO dao = new StudentCardDAO();
Student student = dao.findByName("哈哈");
System.out.println(student.getSid()+":"+student.getSname()+":"+student.getCard().getNum());
}

当然如果你现在就测试,你会死的很惨,因为你没有在StudentMapper.xml文件中配置<select>哦,所以在StudentMapper.xml文件中增加<select>配置信息

<select id="findByName" parameterType="string" resultMap="studentMap">
select s.sid,s.sname,c.cid,c.num
from student s,card c
where s.scid = c.cid and s.sname = #{sname}
</select>

这样就可以测试成功了。大功告成。

完整代码如下:

MySQL数据库脚本

-- 删除数据库
drop database if exists mybaits;
-- 创建数据库
create database if not exists mybatis default character set utf8;
-- 选择数据库
use mybatis;
-- 删除数据表
drop table if exists student ;
drop table if exists card;
-- 创建数据表
create table card(
cid int(255),
num varchar(18),
constraint pk_cid primary key (cid)
);
create table student(
sid int(255),
sname varchar(32),
scid int(255),
constraint pk_sid primary key (sid),
constraint fk_scid foreign key (scid) references card(cid)
);
-- 增加测试数据
insert into card (cid,num) values(1,'123456789012345678');
insert into student (sid,sname,scid) values(1,'哈哈',1);

工具类MyBatis.java类

package util;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
public static SqlSessionFactory sqlSessionFactory ;
//私有化构造方法
private MyBatisUtil(){}
//加载位于src/Mybatis.cfg.xml
static{
try {
Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取SQLSession
* @return
*/
public static SqlSession getSqlSession(){
//从当前线程中获取SqlSession对象
SqlSession sqlSession = threadLocal.get();
if(sqlSession == null){
if(sqlSessionFactory != null){
sqlSession = sqlSessionFactory.openSession();
//讲sqlSession与当前线程绑定在一起
threadLocal.set(sqlSession);
}
}
return sqlSession;
}
/**
* 关闭SqlSession 并与当前线程分开
*/
public static void closeSqlSession(){
//从当前线程中获取SqlSession对象
SqlSession sqlSession = threadLocal.get();
//如果SqlSession对象非空
if(sqlSession != null){
//关闭SqlSession对象
sqlSession.close();
//分离当前线程与SqlSession的关系
threadLocal.remove();
}
}
//测试
public static void main(String[] args) {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
Connection conn= sqlSession.getConnection();
System.out.println(conn != null ?"连接成功":"连接失败");
}
}

mybatis.cfg.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="mysql_developer">
<!-- 连接MySQL环境信息 -->
<environment id="mysql_developer">
<!-- MyBatis使用jdbc事务管理器 -->
<transactionManager type="jdbc"/>
<!-- MyBatis使用连接池方式来获取连接对象 -->
<dataSource type="pooled">
<!-- 配置与数据库交互的4个必要属性 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="mysqladmin"/>
</dataSource>
</environment>
<!-- 连接Oracle环境信息 -->
<environment id="oracle_developer">
<!-- MyBatis使用jdbc事务管理器 -->
<transactionManager type="jdbc"/>
<!-- MyBatis使用连接池方式来获取连接对象 -->
<dataSource type="pooled">
<!-- 配置与数据库交互的4个必要属性 -->
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="one2one/CardMapper.xml"/>
<mapper resource="one2one/StudentMapper.xml"/>
</mappers>
</configuration>

Card.java和Student.java

package one2one;
import java.io.Serializable;
/**
* 身份证
* @author Administrator
*
*/
@SuppressWarnings("serial")
public class Card implements Serializable{
private Integer cid;
private String num;
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
}
package one2one;
import java.io.Serializable;
/**
* 学生
* @author Administrator
*
*/
@SuppressWarnings("serial")
public class Student implements Serializable{
private Integer sid;
private String sname;
private Card card;
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
}

Card.java的映射文件CardMapper.xml文件

<?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="cardNameSpace">
<resultMap type="one2one.Card" id="cardMap">
<id column="cid" property="cid"/>
<result column="num" property="num"/>
</resultMap>
</mapper>

Student.java类对应的映射文件StudentMapper.xml文件

<?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="studentNameSpace">
<resultMap type="one2one.Student" id="studentMap">
<id column="sid" property="sid"/>
<result column="sname" property="sname"/>
<!--
引入CardMapper.xml文件中的映射信息
property表示Student的关联属性
-->
<association property="card" resultMap="cardNameSpace.cardMap"/>
</resultMap>
<select id="findById" parameterType="integer" resultMap="studentMap">
select s.sid,s.sname,c.cid,c.num
from student s,card c
where s.scid = c.cid and s.sid = #{sid}
</select>
<select id="findByName" parameterType="string" resultMap="studentMap">
select s.sid,s.sname,c.cid,c.num
from student s,card c
where s.scid = c.cid and s.sname = #{sname}
</select>
</mapper>

持久层类StudentCardDAO.java类

package one2one;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import util.MyBatisUtil;
/**
* 持久层
* @author Administrator
*
*/
public class StudentCardDAO {
/**
* 查询1号学生的信息与身份证信息
* @param id
* @return
* @throws Exception
*/
public Student findById(Integer id) throws Exception{
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtil.getSqlSession();
return sqlSession.selectOne("studentNameSpace.findById", id);
} catch (Exception e) {
e.printStackTrace();
throw e;
}finally{
MyBatisUtil.closeSqlSession();
}
}
/**
* 查询“哈哈”学生的信息与身份证信息
* @param name
* @return
* @throws Exception
*/
public Student findByName(String name) throws Exception{
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtil.getSqlSession();
return sqlSession.selectOne("studentNameSpace.findByName", name);
} catch (Exception e) {
e.printStackTrace();
throw e;
}finally{
MyBatisUtil.closeSqlSession();
}
}
//测试 查询1号学生的信息与身份证信息
@Test
public void testFindById() throws Exception{
StudentCardDAO dao = new StudentCardDAO();
Student student = dao.findById(1);
System.out.println(student.getSid()+":"+student.getSname()+":"+student.getCard().getNum());
}
//测试 查询“哈哈”学生的信息与身份证信息
@Test
public void testFindByName() throws Exception{
StudentCardDAO dao = new StudentCardDAO();
Student student = dao.findByName("哈哈");
System.out.println(student.getSid()+":"+student.getSname()+":"+student.getCard().getNum());
}
}

以上所述是小编给大家介绍的MyBatis一对一映射初识教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • MyBatis多对多映射初识教程

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 在上篇文章给大家介绍MyBatis一对一映射初识教程. 下面给大家说下mybatis多对多映射知识,具体详情如下所示: 多对多的例子也不少,比如课程与学生之间的关系

  • MyBatis存储过程、MyBatis分页、MyBatis一对多增删改查操作

    一.用到的实体类如下: Student.java package com.company.entity; import java.io.Serializable; import java.util.Date; public class Student implements Serializable{ private static final long serialVersionUID = 1L; private int id; private String name; private Date

  • mybatis一对一查询功能

    所谓的一对一查询,就是说我们在查询一个表的数据的时候,需要关联查询其他表的数据. 需求 首先说一个使用一对一查询的小需求吧:假设我们在查询某一个订单的信息的时候,需要关联查询出创建这个订单对应的用户信息.表模型如下( ResultType sql语句的书写 首先,我们要对我们的需求进行分析.1.我们需要确定这个需求需要涉及到哪两张表,其中哪个是主表,哪个是关联表.具体怎么确定,还是看需求--我们的需求是说,在查询订单的时候,顺带着查出创建这个订单的用户.那么,已经很显然了.我们的主表是订单表(o

  • Mybatis中的高级映射一对一、一对多、多对多

    学习hibernate的时候,小编已经接触多各种映射,mybatis中映射有到底是如何运转的,今天这篇博文,小编主要来简单的介绍一下mybatis中的高级映射,包括一对一.一对多.多对多,希望多有需要的小伙伴有帮助,小编主要从四个方面进行介绍,订单商品数据模型.一对一查询.一对多查询.多对多查询. 一.订单商品数据模型 1.数据库执行脚本,如下所示: <span style="font-family:Comic Sans MS;font-size:18px;">CREATE

  • Mybatis 中的一对一,一对多,多对多的配置原则示例代码

    什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. 表:market_plan(营销计划(关联了用户)) market_plan_product(产品关联营销计划) mark

  • MyBatis一对一映射初识教程

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 一对一映射 在生活中,一对一的例子还是有的,比如啦,学生和身份证哦,或者在我国,实行的是一夫一妻制度哦.那么我们以学生和身份证每个学生只有一张身份证,而每张身份证的

  • MyBatis高级映射学习教程

    对mybatis基础入门不太清楚的朋友可以参考下本篇文章:MyBatis入门学习教程(一)-MyBatis快速入门. 认识MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架

  • mybatis原理概述入门教程

    本文我将要介绍一下mybatis的框架原理,以及mybatis的入门程序,实现用户的增删改查,她有什么优缺点以及mybatis和hibernate之间存在着怎么样的关系,希望对小伙伴们有帮助,不足之处,还请多多指教. 什么是mybatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. MyBatis 是支持定

  • mybatis框架入门学习教程

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 1.创建工程,导入jar包 创建一个java工程或者web工程都可以,然后导入mybatis的jar包和依赖包还有数据库的jar包,本人使用Oracle10g数据库

  • 基于mybatis高级映射多对多查询的实现

    1.同以前一样,首先给一个使用多对多的需求, 要查询用户以及用户所购买的商品信息,经过分析用户和商品数据库级别没有任何关系,用户和商品需要建立关系,要通过订单,订单明细建立关系.根据这个需求,可以分析出需要查询的主表为: 查询主表:用户表 查询关联表:由于商品和用户没有关系,通过订单和订单明细进行关联,所以得出关联表是:orders订单表,orderDetail订单明细表,items商品表.这样的话,sql该如何去写?这样写: select orders.*, t_user.id user_id

  • Java Mybatis框架入门基础教程

    一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果.MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素.Map接口和POJOs(普通java对象)到数据库中的记录. 二.MyBatis工作流程 (1)加载配置并初始化 触发条件:加载配置文件 配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个

  • mybatis generator 使用方法教程(生成带注释的实体类)

    引言: 最近的一个项目,由于数据库表巨多,导致需要创建N多个java实体.dao.mapper.xml映射文件,如果均使用纯手工编写,无疑需要耗费大量时间和精力.于是上网学习了mybatis generator的使用. 现在项目写完了,闲暇之余把干货奉上,供大家直接使用. 需求场景: 当你的java 项目数据库有N张表需要使用mybatis进行数据库操作时,建议使用mybatis generator 自动生成工具.可以自动帮助你生成java实体类.dao.mapper.xml等. 首先给大家分享

  • java 中MyBatis注解映射的实例详解

    java  中MyBatis注解映射的实例详解 1.普通映射 @Select("select * from mybatis_Student where id=#{id}") public Student getStudent(int id); @Insert("insert into mybatis_Student (name, age, remark, pic,grade_id,address_id) values (#{name},#{age},#{remark}, #{

  • Mybatis的详细使用教程

    Mybatis所需要的jar包: 需要引用两个jar包,一个是mybatis,另一个是MySQL-connector-Java,如果是maven工程的话,pom里如下添加依赖就可以了. <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.3</version> </dependency>

随机推荐