mybatis關係一對一(一),和一對多
阿新 • • 發佈:2018-12-13
maven專案各種配置檔案:
<?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.zit</groupId> <artifactId>mybatis05</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>mybatis05</name> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> </dependencies> <build> <finalName>${project.artifactId}</finalName> <testSourceDirectory>src/test/java</testSourceDirectory> <sourceDirectory>src/main/java</sourceDirectory> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources> </build> </project>
src/main/resources下的內容:
conf.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> <!--載入db.peoperties--> <properties resource="db.properties"/> <settings> <!--延遲載入總開關--> <setting name="lazyLoadingEnabled" value="true"/> <!--設定按需載入--> <setting name="aggressiveLazyLoading" value="false"/> <setting name="logPrefix" value="dao."/> </settings> <typeAliases> <!-- <typeAlias type="com.zit.entity.Book" alias="bk"/>--> <package name="com.zit.entity"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${db.driver}"/> <property name="url" value="${db.url}"/> <property name="username" value="${db.username}"/> <property name="password" value="${db.password}"/> </dataSource> </environment> </environments> <mappers> <package name="com.zit.mapper"/> </mappers> </configuration> ***************************************************************************** db.properties db.driver=com.mysql.cj.jdbc.Driver db.url=jdbc:mysql://localhost:3306/tt?serverTimezone=PRC&useSSL=false&useUnicode=true&characterEncoding=utf8 db.username=root db.password= **************************************************************************** logbak.xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %c [LineNumber:%L]: %m%n </pattern> </encoder> </appender> <appender name="debugLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>c:/demo.log</file> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %c [行號:%L]: %m%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/file/path/example/file-name.debug.log.%d{yyyy-MM-dd} </fileNamePattern> </rollingPolicy> </appender> <appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/file/path/example/file-name.error.log</file> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %c [LineNumber:%L]: %m%n </pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/file/path/example/file-name.error.log.%d{yyyy-MM-dd} </fileNamePattern> </rollingPolicy> </appender> <root level="info"> <appender-ref ref="console"/> <appender-ref ref="debugLog"/> <appender-ref ref="errorLog"/> </root> <logger level="debugLog" name="com.Demo"/> <logger level="debug" name="dao"/> <logger level="debug" name="com.zit.servlet.Show"/> <logger name="org.springframework.jdbc.core.JdbcTemplate" level="ERROR"/> </configuration>
src/main/webapp/WEB-INF/web.xml檔案:
<?xml version="1.0" encoding="utf-8" ?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <display-name>mybatis04</display-name> <!--配置web專案的web.xml檔案的首頁--> <welcome-file-list> <welcome-file>/show</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
src/main/java目錄
com.zit.dao
MybatisHelper.java
package com.zit.dao;
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;
import java.io.InputStream;
public class MybatisHelper {
protected SqlSessionFactory sf;
protected SqlSession session;
public MybatisHelper() {
InputStream is = null;
try {
is = Resources.getResourceAsStream("conf.xml");
} catch (IOException e) {
e.printStackTrace();
}
sf = new SqlSessionFactoryBuilder().build(is);
session = sf.openSession();
}
public SqlSession getSqlSession() {
return session;
}
public SqlSessionFactory getFactory() {
return sf;
}
}
**************************************************************************************************************************************************************************
com.zit.entity包下
package com.zit.entity;
import lombok.Data;
@Data
public class Address {
private int addressid;
private int addressmemberid;
private String name;
private String address;
private String phone;
}
package com.zit.entity;
import lombok.Data;
@Data
public class Classes {
private int cid;
private String cname;
private Teacher teacher;
}
package com.zit.entity;
import lombok.Data;
import java.util.Set;
@Data
public class Member {
private int memberid;
private String member;
private String passwd;
private MemberInfo memberinfo;
private Set<Address> addresses;
}
package com.zit.entity;
import lombok.Data;
@Data
public class MemberInfo {
private int infoid;
private int infomemberid;
private String name;
private String gender;
}
package com.zit.entity;
import lombok.Data;
@Data
public class Teacher {
private int tid;
private String tname;
private Classes classes;
}
***********************************************************************
***********************************************************************
com.zit.mapper包下的內容:
classesMapper.java
package com.zit.mapper;
import com.zit.entity.Classes;
import com.zit.entity.Teacher;
import java.util.List;
import java.util.Map;
public interface ClassesMapper {
/*public List<Map<String,Object>>find(int tid);*/
public Classes find(int tid);
}
ClassesMapper.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.zit.mapper.ClassesMapper">
<select id="find" resultMap="getClassesMap" parameterType="int">
select * from classes c,teacher t
where c.tid=t.tid and c.tid=#{tid}
</select>
<resultMap id="getClassesMap" type="com.zit.entity.Classes">
<id column="cid" property="cid"/>
<result column="cname" property="cname"/>
<association property="teacher" javaType="com.zit.entity.Teacher">
<id column="tid" property="tid"/>
<result column="tname" property="tname"/>
</association>
</resultMap>
<!-- <select id="getTeacher" resultMap="getTeacherMap" parameterType="int">
select * from teacher t,classes c
where t.cid=c.cid and t.cid=#{cid}
</select>
<resultMap id="getTeacherMap" type="com.zit.entity.Teacher">
<id column="tid" property="tid"/>
<result column="tname" property="tname"/>
<association property="classes" javaType="com.zit.entity.Classes">
<id column="cid" property="cid"/>
<result column="cname" property="cname"/>
</association>
</resultMap>
<select id="getClasses2" resultMap="getClassesMap2">
select * from classes c where c.cid=#{cid}
</select>
<resultMap id="getClassesMap2" type="com.zit.entity.Classes">
<id column="cid" property="cid"/>
<result column="cname" property="cname"/>
<collection property="teacher" column="tid" select="getTeacherCollection">
</collection>
</resultMap>
<select id="getTeacherCollection" resultMap="com.zit.entity.Teacher">
select tid tid,tname tname from teacher where tid=#{tid}
</select>-->
</mapper>
**************************************************************************
MemberMapper.java
package com.zit.mapper;
import com.zit.entity.Member;
import com.zit.entity.MemberInfo;
import org.apache.ibatis.annotations.Select;
public interface MemberMapper {
public Member queryById(int mid);
}
MemberMapper.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.zit.mapper.MemberMapper">
<select id="queryById" resultMap="m2">
select * from member where memberid=#{memberid}
</select>
<resultMap type="member" id="m2">
<id column="memberid" property="memberid"/>
<result property="member" column="member"/>
<result property="passwd" column="passwd"/>
<!--關係1對1-->
<association property="memberinfo" column="memberid" select="getinfo"/>
<!--關係1對多 set collection-->
<!--fetchType="eager"立即檢索-->
<collection property="addresses" column="memberid" select="addrsel"/>
</resultMap>
<select id="getinfo" resultType="com.zit.entity.MemberInfo">
select * from memberinfo where infomemberid=#{id}
</select>
<select id="addrsel" resultType="com.zit.entity.Address">
select * from memberaddress where addressmemberid=#{memberid}
</select>
<resultMap id="mm" type="member">
<id column="memberid" property="memberid"/>
<result property="member" column="member"/>
<result property="passwd" column="passwd"/>
<association property="memberinfo" javaType="com.zit.entity.MemberInfo">
<id property="infoid" column="name"/>
<result property="name" column="name"/>
<result property="infomemberid" column="infomemberid"/>
<result property="gender" column="gender"/>
</association>
</resultMap>
<!-- <select id="show" resultType="addrmap">
select
</select>-->
<!-- <resultMap id="addrmap" type="com.zit.entity.Member">
<id column="memberid" property="memberid"/>
<result column="member" property="member"/>
<result column="passwd" property="passwd"/>
</resultMap>-->
</mapper>
*********************************************************************
TeacherMapper.java
package com.zit.mapper;
import com.zit.entity.Teacher;
public interface TeacherMapper {
public Teacher find(int tid);
}
TeacherMapper.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.zit.mapper.TeacherMapper">
<select id="find" resultMap="getTeacherMap" parameterType="int">
select * from teacher t,classes c where c.tid=#{tid} and t.tid=#{tid}
</select>
<resultMap id="getTeacherMap" type="com.zit.entity.Teacher">
<id column="tid" property="tid"/>
<result column="tname" property="tname"/>
<association property="classes" javaType="com.zit.entity.Classes">
<id column="cid" property="cid"/>
<result column="cname" property="cname"/>
</association>
</resultMap>
</mapper>
src/main/webapp/WEB-INF/web.xml檔案上面已經寫過了
src/main/webapp包下的jsp檔案:
index.jsp
<%@ page import="java.util.List" %>
<%@ page language="java" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<mata charset="utf-8"/>
<title>顯示書籍資訊</title>
<meta http-equiv="refresh" content="0;url=/show">
</head>
<body>
</body>
</html>
*************************************************************
show.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page language="java" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<mata charset="utf-8"/>
<title>顯示書籍資訊</title>
</head>
<body>
<c:forEach items="${book}" var="bk">
id:${bk.id}----------${bk.name}-----價格:${bk.price}--------出版日期:<fmt:formatDate value="${bk.btime}"
pattern="yyyy年MM月dd日"/>
----<a href="/show?did=${bk.id}">刪除</a>
<a href="/show?uid=${bk.id}">編輯</a>
<br>
</c:forEach>
<br>
<form action="/show" method="post">
書籍名稱:<input type="text" name="name"><br>
書籍價格:<input type="text" name="price"><br>
出版日期:<input type="text" name="btime"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
****************************************************************
update.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page language="java" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<mata charset="utf-8"/>
<title>修改書籍資訊</title>
</head>
<body>
<h3>修改書籍資訊</h3>
<form action="/update?upid=${book.id}" method="post">
書籍名稱:<input type="text" name="name" value="${book.name}"><br>
書籍價格:<input type="text" name="price" value="${book.price}"><br>
出版日期:<input type="text" name="btime" value="<fmt:formatDate value="${book.btime}" pattern="yyyy-MM-dd"/> "><br>
<input type="submit" value="提交更改">
</form>
<a href="/show">檢視書籍資訊</a>
</body>
</html>
src/test/java/com/Demo.java測試類
package com;
import com.zit.dao.MybatisHelper;
import com.zit.entity.Classes;
import com.zit.mapper.ClassesMapper;
import com.zit.mapper.MemberMapper;
import com.zit.mapper.TeacherMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class Demo {
@Test
public void mmm() {
SqlSession session = new MybatisHelper().getSqlSession();
MemberMapper mdao = session.getMapper(MemberMapper.class);
//System.out.println(mdao.queryById(2).getMember());
//System.out.println(mdao.queryById(2).getMemberinfo().getName());
// System.out.println(mdao.queryById(2).getAddresses());
System.out.println(mdao.queryById(2).getMemberinfo().getName());
System.out.println(mdao.queryById(2).getAddresses());
}
@Test
public void ttt() {
SqlSession session = new MybatisHelper().getSqlSession();
TeacherMapper tdao = session.getMapper(TeacherMapper.class);
System.out.println(tdao.find(1));
/* ClassesMapper cdao=session.getMapper(ClassesMapper.class);
//System.out.println(cdao.find(2));
Classes c=cdao.find(2);
System.out.println(c.getCname());
System.out.println(c.getTeacher().getTname());*/
}
}
完成。。。。。。。。。。。。。。。。。。。。。。。。。。。。