one2many保存方法
one2many查询方法
文件组成目录
one2many查询第一种方式
db.properties
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/mybatis
db.username=root
db.password=123456
log4j.properties
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.one2many.domain=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
mybatis.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>
<properties resource="db.properties"></properties>
<typeAliases>
<typeAlias type="one2many.domain.department" alias="department"></typeAlias>
<typeAlias type="one2many.domain.employee" alias="employee"></typeAlias>
</typeAliases>
<environments default="default">
<environment id="default">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${db.driverClassName}"></property>
<property name="url" value="${db.url}"></property>
<property name="username" value="${db.username}"></property>
<property name="password" value="${db.password}"></property>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="one2many/domain/departmentmapper.xml"></mapper>
<mapper resource="one2many/domain/employeemappper.xml"></mapper>
</mappers>
</configuration>
department类
package one2many.domain;
import java.util.ArrayList;
import java.util.List;
public class department {
private Long id;
private String name;
private List<employee>list=new ArrayList<>();
public department() {}
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 List<employee> getList() {
return list;
}
public void setList(List<employee> list) {
this.list = list;
}
@Override
public String toString() {
return "department{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
employee类
package one2many.domain;
public class employee {
private Long id;
private String name;
public employee() {}
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;
}
@Override
public String toString() {
return "employee{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
departmapper接口
package one2many.domain;
import org.apache.ibatis.annotations.Param;
public interface departmentmapper {
void deptsave(department d);
void renew(@Param("depid")Long depid,@Param("empid")Long empid);
department get(Long id);
}
employeemapper接口
package one2many.domain;
import java.util.List;
public interface employeemapper {
void save(employee e);
// List<employee>list(Long id);
}
departmapper.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="one2many.domain.departmentmapper">
<resultMap id="base" type="department">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
<collection property="list" column="id" ofType="employee" select="one2many.domain.employeemapper.list"></collection>//教训
</resultMap>
<insert id="deptsave" parameterType="department" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
INSERT INTO department(name)VALUES (#{name})
</insert>
<update id="renew">
UPDATE employee SET dept_id=#{depid} WHERE id=#{empid}
</update>
<select id="get" parameterType="long" resultMap="base">
SELECT *FROM department WHERE id=#{id}
</select>
</mapper>
employeemapper.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="one2many.domain.employeemapper">
<insert id="save" parameterType="employee" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
INSERT INTO employee(name)VALUES (#{name})
</insert>
<select id="list" parameterType="long" resultType="employee">
SELECT id,name FROM employee WHERE dept_id=#{id}
</select>
</mapper>
mybatisutils方法类
package one2many.utils;
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 java.io.IOException;
public class mybatisutils {
private SqlSessionFactory sf;
private static mybatisutils instance=new mybatisutils();
public mybatisutils(){
try {
sf=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession opensession(){
return instance.sf.openSession();
}
}
test测试类
package one2many.domain;
import one2many.utils.mybatisutils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class test {
@Test
public void testsave(){
SqlSession session= mybatisutils.opensession();
employee e1=new employee();
e1.setName("员工超级大佬1");
employee e2=new employee();
e2.setName("员工超级大佬2");
department d=new department();
d.setName("部门超级大佬");
departmentmapper deptmapper=session.getMapper(departmentmapper.class);
employeemapper emmapper=session.getMapper(employeemapper.class);
d.getList().add(e1);
d.getList().add(e2);
deptmapper.deptsave(d);
emmapper.save(e1);
emmapper.save(e2);
List<employee>list=d.getList();
for (employee employee : list) {
deptmapper.renew(d.getId(),employee.getId());
}
session.close();
}
@Test
public void testselect(){
SqlSession session= mybatisutils.opensession();
departmentmapper mapper=session.getMapper(departmentmapper.class);
department d=mapper.get(19L);
List<employee>em=d.getList();
for (employee employee : em) {
System.out.println(employee);
}
session.close();
}
}
第二种方式:内联方式
就稍微修改一下departmapper.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="one2many.domain.departmentmapper">
<!--<resultMap id="base" type="department">-->
<!--<id column="id" property="id"></id>-->
<!--<result column="name" property="name"></result>-->
<!--<collection property="list" column="id" ofType="employee" select="one2many.domain.employeemapper.list"></collection>-->
<!--</resultMap>-->
<!--第二种方式-->
<resultMap id="base" type="department" >
<id column="id" property="id"></id>
<result column="name" property="name"></result>
<collection property="list" ofType="employee" columnPrefix="emp_">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
</collection>
</resultMap>
<insert id="deptsave" parameterType="department" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
INSERT INTO department(name)VALUES (#{name})
</insert>
<update id="renew">
UPDATE employee SET dept_id=#{depid} WHERE id=#{empid}
</update>
<select id="get" parameterType="long" resultMap="base">
<!--SELECT *FROM department WHERE id=#{id}-->
SELECT d.id,d.name,e.id as emp_id,e.name as emp_name from department d LEFT JOIN employee e on d.id=e.dept_id WHERE d.id=#{id}
</select>
</mapper>
结果如下
保存结果
查询结果
删除操作
对原有文件稍微修改既可实现效果
employeemapper.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="one2many.domain.employeemapper">
<insert id="save" parameterType="employee" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
INSERT INTO employee(name)VALUES (#{name})
</insert>
<select id="list" parameterType="long" resultType="employee">
SELECT id,name FROM employee WHERE dept_id=#{id}
</select>
<update id="updatedata" parameterType="long">
UPDATE employee SET dept_id=null WHERE dept_id=#{id} //增加了更新功能,用于打破外键关系
</update>
</mapper>
departmentmapper.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="one2many.domain.departmentmapper">
<!--<resultMap id="base" type="department">-->
<!--<id column="id" property="id"></id>-->
<!--<result column="name" property="name"></result>-->
<!--<collection property="list" column="id" ofType="employee" select="one2many.domain.employeemapper.list"></collection>-->
<!--</resultMap>-->
<resultMap id="base" type="department" >
<id column="id" property="id"></id>
<result column="name" property="name"></result>
<collection property="list" ofType="employee" columnPrefix="emp_">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
</collection>
</resultMap>
<insert id="deptsave" parameterType="department" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
INSERT INTO department(name)VALUES (#{name})
</insert>
<update id="renew">
UPDATE employee SET dept_id=#{depid} WHERE id=#{empid}
</update>
<select id="get" parameterType="long" resultMap="base">
<!--SELECT *FROM department WHERE id=#{id}-->
SELECT d.id,d.name,e.id as emp_id,e.name as emp_name from department d LEFT JOIN employee e on d.id=e.dept_id WHERE d.id=#{id}
</select>
<delete id="deletedata" parameterType="long">
DELETE FROM department WHERE id=#{id}
</delete>
</mapper>
test测试方法类
package one2many.domain;
import one2many.utils.mybatisutils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class test {
@Test
public void testsave(){
SqlSession session= mybatisutils.opensession();
employee e1=new employee();
e1.setName("员工超级大佬1");
employee e2=new employee();
e2.setName("员工超级大佬2");
department d=new department();
d.setName("部门超级大佬");
departmentmapper deptmapper=session.getMapper(departmentmapper.class);
employeemapper emmapper=session.getMapper(employeemapper.class);
d.getList().add(e1);
d.getList().add(e2);
deptmapper.deptsave(d);
emmapper.save(e1);
emmapper.save(e2);
List<employee>list=d.getList();
for (employee employee : list) {
deptmapper.renew(d.getId(),employee.getId());
}
session.close();
}
@Test
public void testselect(){
SqlSession session= mybatisutils.opensession();
departmentmapper mapper=session.getMapper(departmentmapper.class);
department d=mapper.get(19L);
List<employee>em=d.getList();
for (employee employee : em) {
System.out.println(employee);
}
session.close();
}
@Test
public void testdeandup(){
SqlSession session= mybatisutils.opensession();
departmentmapper deptmapper=session.getMapper(departmentmapper.class);
employeemapper empmapper=session.getMapper(employeemapper.class);
empmapper.updatedata(19L); //先打破关系
deptmapper.deletedata(19L); //再删除
session.close();
}
}
结果为: