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>
    &nbsp;&nbsp;
    <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());*/
    }
}

完成。。。。。。。。。。。。。。。。。。。。。。。。。。。。

10-04 14:52