one2many具体操作

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.commit();

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.commit();

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.commit();

session.close();

}

}

结果为:

猜你喜欢

转载自blog.csdn.net/zhouzhou_98/article/details/83932910