注意细节:1、在编写映射文件的时候<collection > 里面类型要使用oftype
2、在涉及到多个表的时候,这个时候我们传入的参数可以为hashmap 简单方便操作。
一、目录结构
二、代码实现
2.1实体类EStudent.java
public class EStudent implements Serializable{
private long id;
private String name;
private int age;
private Major major;//面向对象的方式
private int stu_id;
// getter,setter方法
public Major getMajor() {
return major;
}
public int getStu_id() {
return stu_id;
}
public void setStu_id(int stu_id) {
this.stu_id = stu_id;
}
public void setMajor(Major major) {
this.major = major;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
/**
* 必须提供一个无参数的构造函数
*/
public EStudent(){}
}
2.2实体类Major
import java.io.Serializable;
import java.util.List;
public class Major implements Serializable{
private int marjor_id;
private String major;
private List<EStudent> stu;
public Major() {
}
public int getMarjor_id() {
return marjor_id;
}
public void setMarjor_id(int marjor_id) {
this.marjor_id = marjor_id;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public List<EStudent> getStu() {
return stu;
}
public void setStu(List<EStudent> stu) {
this.stu = stu;
}
}
2.3MajorMapper 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.student.entity.majortest">
<select id="searchStudent" resultMap="selectMajor">
SELECT *FROM esmajor,estudent WHERE esmajor.major_id=estudent.stu_id
</select>
<insert id="insertStudent" parameterType="com.student.entity.Major">
INSERT INTO esmajor(marjor_id,major)VALUES(#{marjor_id},#{major})
</insert>
<update id="updateStudent" parameterType="hashmap">
UPDATE estudent SET estudent.`name`=#{name} WHERE stu_id=#{stu_id} AND #{stu_id} IN (SELECT esmajor.marjor_id FROM esmajor)
</update>
<resultMap id="selectMajor" type="com.student.entity.Major">
<id column="marjor_id" property="marjor_id"/>
<result property="major" column="major"/>
<collection property="stu" ofType="com.student.entity.EStudent">
<id column="id" property="id" />
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="stu_id" property="stu_id"/>
</collection>
</resultMap>
</mapper>
2.4数据库链接ConnectionSql
import java.io.IOException;
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 ConnectionSql {
static SqlSessionFactory factory;
static {
String resource="batis.xml";
try {
if(factory==null) {
factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource));
}
}catch(IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession() {
return factory.openSession();
}
}
2.5测试类MybatisTest2
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.student.entity.EStudent;
import com.student.entity.Major;
import com.student.jdbc.ConnectionSql;
public class MybatisTest2 {
public static void main(String[] args) {
SqlSession session = ConnectionSql.getSession();
/*
* 多表查询
List<Major> majorList = session.selectList("com.student.entity.majortest.searchStudent");
for (Major major2 : majorList) {
List<EStudent> stuList = major2.getStu();
for (EStudent eStudent : stuList) {
System.out.println(major2.getMajor() + eStudent.getName());
}
}*/
/*
* 插入(后面不能使用where语句)
*
Major major = new Major();
major.setMarjor_id(5);
major.setMajor("嵌入式");
int a = session.insert("com.student.entity.majortest.insertStudent",major);
session.commit();
System.out.println(a);
*/
/*
* update 更新语句
* 在涉及多张表的时候,咱们可以放弃使用对象来操作的方式,就是查询的那种方式,我们可以使用hashmap通过这个方便操作。
* 备注,要学会灵活使用这些操作
* 这里删除操作类似,我就不写了
*/
HashMap<String,Object> argMap = new HashMap<String,Object>();
argMap.put("name","灰太狼");
argMap.put("stu_id", 3);
int a = session.update("com.student.entity.majortest.updateStudent", argMap);
session.commit();
System.out.println(a);
}
}
2.6数据库文件配置batis.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>
<typeAliases>
<typeAlias type="com.student.entity.EStudent" alias="Student"/>
</typeAliases>
<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/db_batis?useUnicode=true&characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com\student\entity\MajorMapper.xml" />
</mappers>
</configuration>
三、Mybatis学习笔记相关架包