项目环境:
1: jdk(8)
a: 安装的目录中不能有中文
b: 关闭360,鲁大师....
c: 配置环境变量
(1): 配置JAVA_HOME
(2): 配置path
d: 验证环境变量
cmd---->java | javac
2: mysql(目前应用比较广泛)
a: 安装的目录中不能有中文
b: 关闭360,鲁大师....
c: 输入mysql---> mysql客户端---》输入密码
3:maven工具
a: 解压的目录中不能有中文
b: 配置环境变量
c: 验证maven是否可用
cmd-->mvn -v
注意: 如果输入命令后出现错误信息(不是可执行的命令..),环境变量配置出现问题。
4: idea(IDE) 编写代码的工具
5:配置maven仓库
maven的解压目录中:
conf---->settings.xml
修改settings.xml
a:
55行:添加本地仓库的配置
<localRepository>个人本地硬盘位置(路径) 路径中不要出现中文</localRepository>
b:
160---165行添加:
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
c:
256-268行之间:
<!-- java版本 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
6: 完成idea和maven结合配置
a:File-settings
b:File-New project Settings
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PJ0iU61V-1648359576109)(mvn.jpg)]
介绍项目中持久层技术应用
持久层技术: mybatis
数据持久化操作: jdbc---hibernate--mybatis--mybatis-Plus
ORM: 对象关系映射
java中的对象(数据模型object) 自动关联 数据库表
入门案例
mybatis官方提供使用手册的地址:
https://mybatis.net.cn/
1:创建一个maven工程。
2:添加依赖(项目引入第三方提供技术支持) pom.xml。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.offcn</groupId>
<artifactId>mavendemo01</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3:编写模型Person.java
package com.offcn.pojo;
/*
* 模型工具类
* 和数据库表person对应的
*
* */
public class Person {
//用户id 主键
private Integer pid;
//用户名称
private String pname;
//用户籍贯
private String address;
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Person{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", address='" + address + '\'' +
'}';
}
}
4:创建数据库表
Create Table
CREATE TABLE `person` (
`pid` int(11) NOT NULL AUTO_INCREMENT,
`pname` varchar(32) DEFAULT NULL,
`address` varchar(32) DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
5:构建框架的主配置文件
mybatiscfg.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="default">
<environment id="default">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="url" value="jdbc:mysql:///0913db"/>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="PersonMapper.xml"></mapper>
</mappers>
</configuration>
6:构建接口PersonMapper.java
package com.offcn.mapper;
import com.offcn.pojo.Person;
public interface PersonMapper {
public int savePerson(Person person);
}
7:创建PersonMapper.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="com.offcn.mapper.PersonMapper">
<insert id="savePerson">
insert into person(pid,pname,address) values(#{pid},#{pname},#{address})
</insert>
</mapper>
8: 创建测试文件 测试结果
@Test
public void test1() throws Exception {
String path = "mybatiscfg.xml";
InputStream resourceAsStream = Resources.getResourceAsStream(path);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//接口对象
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
Person person = new Person();
person.setPname("赵敏");
person.setAddress("北京王府池子");
//使用接口对象操作数据
mapper.savePerson(person);
sqlSession.commit();
sqlSession.close();
}
Person表的CRUD操作
1: 查询表中的所有数据
a: PersonMapper.java接口中添加方法
public List<Person> showInfo();
b: PersonMapper.xml中配置
<select id="showInfo" resultType="com.offcn.pojo.Person">
select * from person
</select>
2: 删除表数据
a: PersonMapper.java接口中添加方法
public int deleteInfo(@Param("pid") Integer id);
b: PersonMapper.xml中配置
<delete id="deleteInfo">
delete from person where pid=#{pid}
</delete>
3:更新数据
a: PersonMapper.java接口中添加方法
public int updateInfo(Person person);
b: PersonMapper.xml中配置
<update id="updateInfo">
update person set address=#{address} where pid=#{pid}
</update>
注意:
sql语句中使用的表名 或者是表的字段名称
#{名称} java对象的属性名称,
如果传入的参数是一个 数字 Boolean .. #{名称} 任意命名
MyBatis的多表操作(查询)
(1)一对一操作
需求:查询person表的时候我们需要自动关联查询car
1:构建maven工程
2:添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.offcn</groupId>
<artifactId>onetoonetest</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
</dependencies>
</project>
3:构建实体对象
package com.offcn.pojo;
//购物车
public class Car {
private Integer cid;
private Double total;
private String des;
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public Double getTotal() {
return total;
}
public void setTotal(Double total) {
this.total = total;
}
public String getDes() {
return des;
}
public void setDes(String des) {
this.des = des;
}
@Override
public String toString() {
return "Car{" +
"cid=" + cid +
", total=" + total +
", des='" + des + '\'' +
'}';
}
}
package com.offcn.pojo;
//用户
public class Person {
private Integer pid;
private String pname;
private String address;
private Car car;
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Person{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", address='" + address + '\'' +
'}';
}
}
4:构建实体对应的表
CREATE TABLE `person` (
`pid` int(11) NOT NULL AUTO_INCREMENT,
`pname` varchar(32) DEFAULT NULL,
`address` varchar(32) DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
CREATE TABLE `car` (
`cid` int(11) NOT NULL,
`total` double DEFAULT NULL,
`des` varchar(32) DEFAULT NULL,
PRIMARY KEY (`cid`),
CONSTRAINT `car_ibfk_1` FOREIGN KEY (`cid`) REFERENCES `person` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
5:构建了接口
package com.offcn.mapper;
import com.offcn.pojo.Car;
import org.apache.ibatis.annotations.Param;
public interface CarMapper {
public Car getOneCarByPk(@Param("cid") Integer cid);
}
package com.offcn.mapper;
import com.offcn.pojo.Person;
import org.apache.ibatis.annotations.Param;
public interface PersonMapper {
public Person getOneByPk(@Param("pid") Integer pid);
}
6:构建接口的配置文件
CarMapper.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="com.offcn.mapper.CarMapper">
<select id="getOneCarByPk" resultType="com.offcn.pojo.Car">
select * from car where cid=#{cid}
</select>
</mapper>
PersonMapper.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="com.offcn.mapper.PersonMapper">
<resultMap id="newPerson" type="com.offcn.pojo.Person">
<id property="pid" column="pid"></id>
<result property="pname" column="pname"></result>
<result property="address" column="address"></result>
<association property="car" column="pid" select="com.offcn.mapper.CarMapper.getOneCarByPk"></association>
</resultMap>
<select id="getOneByPk" resultMap="newPerson">
select * from person where pid=#{pid}
</select>
</mapper>
7:构建mybatis的主配置文件
<?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="default">
<environment id="default">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="url" value="jdbc:mysql:///0913db"/>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="PersonMapper.xml"></mapper>
<mapper resource="CarMapper.xml"></mapper>
</mappers>
</configuration>
8:添加日期配置文件 resources下
log4j.properties
# 全局日志配置
log4j.rootLogger=DEBUG, stdout
# MyBatis 日志配置
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
9:运行测试结果
package com.offcn.test;
import com.offcn.mapper.PersonMapper;
import com.offcn.pojo.Person;
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.time.Period;
public class MyBatisTest {
@Test
public void test1() throws Exception {
String path = "mybatiscfg.xml";
InputStream resourceAsStream = Resources.getResourceAsStream(path);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
Person oneByPk = mapper.getOneByPk(2);
System.out.println(oneByPk);
System.out.println(oneByPk.getCar());
sqlSession.commit();
sqlSession.close();
}
}
(2)一对多操作
一个用户可以有多个订单
1:构建maven工程
2:添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.offcn</groupId>
<artifactId>onetomanytest</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
</dependencies>
</project>
3:构建模型
package com.offcn.pojo;
public class Orders {
private String oid; //编号
private Double total;//总计
public String getOid() {
return oid;
}
public void setOid(String oid) {
this.oid = oid;
}
public Double getTotal() {
return total;
}
public void setTotal(Double total) {
this.total = total;
}
@Override
public String toString() {
return "Orders{" +
"oid='" + oid + '\'' +
", total=" + total +
'}';
}
}
package com.offcn.pojo;
import java.util.List;
public class Person {
private Integer pid;
private String pname;
private String address;
private List<Orders> ordersList;
public List<Orders> getOrdersList() {
return ordersList;
}
public void setOrdersList(List<Orders> ordersList) {
this.ordersList = ordersList;
}
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Person{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", address='" + address + '\'' +
'}';
}
}
4:构建表
CREATE TABLE `person` (
`pid` int(11) NOT NULL AUTO_INCREMENT,
`pname` varchar(32) DEFAULT NULL,
`address` varchar(32) DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
CREATE TABLE `orders` (
`oid` varchar(32) NOT NULL,
`total` double DEFAULT NULL,
`pfk` int(11) DEFAULT NULL,
PRIMARY KEY (`oid`),
KEY `pfk` (`pfk`),
CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`pfk`) REFERENCES `person` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
5:构建接口
package com.offcn.mapper;
import com.offcn.pojo.Person;
import org.apache.ibatis.annotations.Param;
public interface PersonMapper {
public Person getOneByPk(@Param("pid") Integer pid);
}
package com.offcn.mapper;
import com.offcn.pojo.Orders;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface OrdersMapper {
public List<Orders> getOrdersByPid(@Param("pid") Integer pid);
}
6:构建接口对应的配置文件
OrdersMapper.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="com.offcn.mapper.OrdersMapper">
<select id="getOrdersByPid" resultType="com.offcn.pojo.Orders">
select * from orders where pfk=#{pid}
</select>
</mapper>
PersonMapper.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="com.offcn.mapper.PersonMapper">
<resultMap id="newPerson" type="com.offcn.pojo.Person">
<id property="pid" column="pid"></id>
<result property="pname" column="pname"></result>
<result property="address" column="address"></result>
<collection property="ordersList" column="pid" select="com.offcn.mapper.OrdersMapper.getOrdersByPid"></collection>
</resultMap>
<select id="getOneByPk" resultMap="newPerson">
select * from person where pid=#{pid}
</select>
</mapper>
7:构建主配置文件
<?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="default">
<environment id="default">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="url" value="jdbc:mysql:///0913db"/>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="PersonMapper.xml"></mapper>
<mapper resource="OrdersMapper.xml"></mapper>
</mappers>
</configuration>
8:构建日志配置文件
# 全局日志配置
log4j.rootLogger=DEBUG, stdout
# MyBatis 日志配置
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
9:测试运行
package com.offcn.test;
import com.offcn.mapper.PersonMapper;
import com.offcn.pojo.Person;
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;
public class MyBatisTest {
@Test
public void test1() throws Exception {
String path = "mybatiscfg.xml";
InputStream resourceAsStream = Resources.getResourceAsStream(path);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
Person oneByPk = mapper.getOneByPk(2);
System.out.println(oneByPk);
System.out.println(oneByPk.getOrdersList());
sqlSession.commit();
sqlSession.close();
}
}
(3)多对多操作
学生 和 学校
1: 构建maven工程
2: 添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.offcn</groupId>
<artifactId>manytomanytest</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
</dependencies>
</project>
3:构建模型对象
package com.offcn.pojo;
public class School {
private Integer schid;
private String schname;
public Integer getSchid() {
return schid;
}
public void setSchid(Integer schid) {
this.schid = schid;
}
public String getSchname() {
return schname;
}
public void setSchname(String schname) {
this.schname = schname;
}
@Override
public String toString() {
return "School{" +
"schid=" + schid +
", schname='" + schname + '\'' +
'}';
}
}
package com.offcn.pojo;
public class StuSch {
private Integer stufk;
private Integer schfk;
private String des;
private School school;
public School getSchool() {
return school;
}
public void setSchool(School school) {
this.school = school;
}
public Integer getStufk() {
return stufk;
}
public void setStufk(Integer stufk) {
this.stufk = stufk;
}
public Integer getSchfk() {
return schfk;
}
public void setSchfk(Integer schfk) {
this.schfk = schfk;
}
public String getDes() {
return des;
}
public void setDes(String des) {
this.des = des;
}
}
package com.offcn.pojo;
import java.util.List;
public class Student {
private String stuid;
private String stuname;
private List<StuSch> stuSchList;
public List<StuSch> getStuSchList() {
return stuSchList;
}
public void setStuSchList(List<StuSch> stuSchList) {
this.stuSchList = stuSchList;
}
public String getStuid() {
return stuid;
}
public void setStuid(String stuid) {
this.stuid = stuid;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
@Override
public String toString() {
return "Student{" +
"stuid='" + stuid + '\'' +
", stuname='" + stuname + '\'' +
'}';
}
}
4:构建数据表
学生表
CREATE TABLE `student` (
`stuid` int(11) NOT NULL AUTO_INCREMENT,
`stuname` varchar(32) DEFAULT NULL,
PRIMARY KEY (`stuid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
学校表
CREATE TABLE `school` (
`schid` int(11) NOT NULL AUTO_INCREMENT,
`schname` varchar(32) DEFAULT NULL,
PRIMARY KEY (`schid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
学生和学校的中间表
CREATE TABLE `stusch` (
`stufk` int(11) NOT NULL,
`schfk` int(11) NOT NULL,
`des` varchar(32) DEFAULT NULL,
PRIMARY KEY (`stufk`,`schfk`),
KEY `schfk` (`schfk`),
CONSTRAINT `stusch_ibfk_1` FOREIGN KEY (`stufk`) REFERENCES `student` (`stuid`),
CONSTRAINT `stusch_ibfk_2` FOREIGN KEY (`schfk`) REFERENCES `school` (`schid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
5:构建的接口
package com.offcn.mapper;
import com.offcn.pojo.Student;
import org.apache.ibatis.annotations.Param;
public interface StudentMapper {
public Student getOneStudentByPk(@Param("stuid") Integer stuid);
}
package com.offcn.mapper;
import com.offcn.pojo.StuSch;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface StuSchMapper {
public List<StuSch> getRefInfo(@Param("stuid") Integer stuid);
}
package com.offcn.mapper;
import com.offcn.pojo.School;
import org.apache.ibatis.annotations.Param;
public interface SchoolMapper {
public School getOneByPk(@Param("schid") Integer schid);
}
6:构建的接口对应的配置文件
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="com.offcn.mapper.StudentMapper">
<resultMap id="newStudent" type="com.offcn.pojo.Student">
<id property="stuid" column="stuid"></id>
<result property="stuname" column="stuname"></result>
<collection property="stuSchList" column="stuid" select="com.offcn.mapper.StuSchMapper.getRefInfo"></collection>
</resultMap>
<select id="getOneStudentByPk" resultMap="newStudent">
select * from student where stuid=#{stuid}
</select>
</mapper>
StuSchMapper.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="com.offcn.mapper.StuSchMapper">
<resultMap id="newStuSch" type="com.offcn.pojo.StuSch">
<id property="stufk" column="stufk"></id>
<id property="schfk" column="schfk"></id>
<result property="des" column="des"></result>
<association property="school" column="schfk" select="com.offcn.mapper.SchoolMapper.getOneByPk"></association>
</resultMap>
<select id="getRefInfo" resultMap="newStuSch">
select * from stusch where stufk=#{stuid}
</select>
</mapper>
SchoolMapper.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="com.offcn.mapper.SchoolMapper">
<select id="getOneByPk" resultType="com.offcn.pojo.School">
select * from school where schid=#{schid}
</select>
</mapper>
7:构建主配置文件
<?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="default">
<environment id="default">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="url" value="jdbc:mysql:///0913db"/>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="StudentMapper.xml"></mapper>
<mapper resource="SchoolMapper.xml"></mapper>
<mapper resource="StuSchMapper.xml"></mapper>
</mappers>
</configuration>
8:构建日期配置文件
log4j.properties
# 全局日志配置
log4j.rootLogger=DEBUG, stdout
# MyBatis 日志配置
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
9:测试内容
package com.offcn.test;
import com.offcn.mapper.StudentMapper;
import com.offcn.pojo.School;
import com.offcn.pojo.StuSch;
import com.offcn.pojo.Student;
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;
public class MyBatisTest {
@Test
public void test1() throws Exception {
String path = "mybatiscfg.xml";
InputStream resourceAsStream = Resources.getResourceAsStream(path);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
Student oneStudentByPk = mapper.getOneStudentByPk(3);
System.out.println(oneStudentByPk);
System.out.println("报考院校信息如下:\n");
for(StuSch one: oneStudentByPk.getStuSchList()){
System.out.println(one.getSchool());
}
sqlSession.commit();
sqlSession.close();
}
}