1. 程式人生 > >Mybatis環境搭建

Mybatis環境搭建

dtd 分享 esp patch 默認 imp 創建 @override isp

一、mybatis環境搭建:

  1. mybatis.jar與mysql.jar,需要在pom.xml中引入這兩個jar的依賴

     1     <dependency>
     2       <groupId>org.mybatis</groupId>
     3       <artifactId>mybatis</artifactId>
     4       <version>3.4.6</version>
     5     </dependency>
     6     <dependency>
     7       <
    groupId>mysql</groupId> 8 <artifactId>mysql-connector-java</artifactId> 9 <version>5.1.44</version> 10 </dependency>
  2. mybatis-config.xml---mybatis的主配置文件,包括數據庫連接池的配置,映射配置文件路徑(類路徑下)
     1 <?xml version=‘1.0‘ encoding=‘UTF-8‘?>
     2 <!DOCTYPE configuration
    
    3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <properties resource="db.properties"/><!--加載db.properties--> 7 <environments default="development"> <!--進行數據源的配置,可以配置多個數據源,default屬性來配置默認數據源-->
    8 <environment id="development"> 9 <transactionManager type="JDBC"/> 10 <dataSource type="POOLED"> 11 <property name="driver" value="${driver}"/> 12 <property name="url" value="${url}"/> 13 <property name="username" value="${username}"/> 14 <property name="password" value="${password}"/> 15 </dataSource> 16 </environment> 17 </environments> 18 <mappers> 19 <mapper resource="mappers/studentMapper.xml"/> 20 </mappers> 21 </configuration>
  3. db.properties配置(類路徑下)
    1 driver=com.mysql.jdbc.Driver
    2 url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8
    3 username=root
    4 password=root
  4. log4j.properties配置(類路徑下)
    1 log4j.rootLogger=DEBUG, A1
    2 log4j.appender.A1=org.apache.log4j.ConsoleAppender
    3 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    4 log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
  5. 外部映射文件配置studentMapper.xml(在mapper文件夾中)
     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="com.entity.Student"><!-- 這裏是實體類的全路徑,namespace用於session級別的緩存管理-->
     6     <resultMap id="forStudent" type="com.entity.Student">
     7         <result column="name" property="name"/>
     8         <result column="id" property="id"/>
     9         <result column="reg_no" property="reg_no"/>
    10         <result column="sex" property="sex"/>
    11         <result column="age" property="age"/>
    12         <result column="grade" property="grade"/>
    13         <result column="major" property="major"/>
    14 
    15         <collection property="listCourse" javaType="ArrayList"
    16                     column="major" ofType="com.entity.Course"
    17                     select="getCourse">
    18         </collection>
    19     </resultMap>
    20     <select id="getCourse" resultType="com.entity.Course">
    21         select * from course where major_name = #{major}
    22     </select>
    23     <select id="selectAll" resultMap="forStudent" >
    24     select * from student
    25         <if test="id != null">
    26             where id = #{id}
    27         </if>
    28   </select>
    29     <insert id="addStudent" useGeneratedKeys="true" keyProperty="id">
    30         insert into student (id,reg_no,name,sex,age,grade,major)
    31         values(#{id},#{reg_no},#{name},#{sex},#{age},#{grade},#{major})
    32     </insert>
    33     <update id="updateStudent">
    34         update student set name=#{name},age=#{age},sex=#{sex},grade=#{grade},major=#{major} where id=#{id};
    35     </update>
    36 </mapper>

二、java中Mybatis執行流程:

  1. 加載mybatis-config文件
  2. 創建InputStream
  3. 獲得SqlSessionFactory
  4. 獲得SqlSession
  5. 執行配置好的sql
    @org.junit.Test
        public void test1() throws IOException {
            String resource = "mybatis-config.xml"
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session = sqlSessionFactory.openSession();
            List<Student> list = session.selectList("selectAll");
            System.out.println(list);
            session.close();
        }

三、javaWEB中mybatis執行流程

  1. 創建一個SQLSessionFactoryUtils,封裝獲取SqlSessionFactory的一些方法
     1 public class SqlSessionFactoryUtils {
     2 
     3     private static String RESOURCE = "mybatis-config.xml";
     4 
     5     private static SqlSessionFactory sqlSessionFactory;
     6 
     7     private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
     8 
     9     /**
    10      * 創建一個初始化SqlSessionFactory的方法
    11      */
    12     public static void initSqlSessionFactry() {
    13         try {
    14             InputStream is = Resources.getResourceAsStream(RESOURCE);
    15 
    16             sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    17         } catch (IOException e) {
    18             e.printStackTrace();
    19         }
    20     }
    21 
    22     /**
    23      * 獲取工廠對象的方法
    24      * @return
    25      */
    26     public static SqlSessionFactory getSqlSessionFactory() {
    27         return sqlSessionFactory;
    28     }
    29 
    30     /**
    31      * 關閉SqlSession的方法
    32      */
    33     public static void close(){
    34         SqlSession session = threadLocal.get();
    35         if(session != null) {
    36             session.close();
    37             threadLocal.set(null);
    38         }
    39     }
    40 }

  2. 創建InitialSqlSessionListener,,當web容器啟動時加載SqlSessionFactory,web容器關閉時銷毀SqlSessionFactory
    @WebListener
    public class InitSqlSessionListener implements ServletContextListener {
        public void contextInitialized(ServletContextEvent servletContextEvent) {
            System.out.println("容器加載中...");
            // 初始化我們的SqlSesionFactory對象
            SqlSessionFactoryUtils.initSqlSessionFactry();
        }
    
        public void contextDestroyed(ServletContextEvent servletContextEvent) {
            System.out.println("容器銷毀中...");
            // 關閉SqlSession對象
            SqlSessionFactoryUtils.close();
        }
    }

  3. 創建StudentDao
     1 public class StudentDao {
     2     public List<Student> selectAll(){
     3         SqlSession session = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
     4         List<Student> studentList = session.selectList("selectAll");
     5         return studentList;
     6     }
     7     public int addStudent(Student student){
     8         SqlSession session = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
     9         int result = session.insert("addStudent", student);
    10         session.commit();
    11         return result;
    12     }
    13     public void updateStudent(Student student) {
    14         SqlSession session = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
    15         session.update("updateStudent",student);
    16         session.commit();
    17     }
    18 
    19     public Student selectStuById(int id) {
    20         SqlSession session = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
    21         Student stu = new Student();
    22         stu.setId(id);
    23         Student student = session.selectOne("selectAll",stu);
    24         System.out.println(student);
    25         return student;
    26     }
    27 }

  4. 創建StudentService(為了方便,省去了)
  5. 創建StudentServlet
    @WebServlet(value = "/StudentServlet")
    public class StudentServlet extends HttpServlet {
        StudentDao dao;
        public StudentServlet(){
            dao = new StudentDao();
        }
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String path = req.getServletPath();
    //        if(Objects.equals(path, "/aaaa")){
                List<Student> studentList = dao.selectAll();
            System.out.println(studentList);
                req.setAttribute("studentList", studentList);
                req.getRequestDispatcher("/index.jsp").forward(req, resp);
    //        }
        }
    }

  6. 編寫index.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <html>
    <head>
        <title>學生管理系統</title>
        <link rel="stylesheet" href="lib/bootstrap-3.3.7-dist/css/bootstrap.min.css">
        <script src="lib/2.2.4/jquery-1.12.4.min.js"></script>
        <script src="lib/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
    </head>
    <body>
    <div class="container">
        <div class="row">
            <div class="page-header">
                <h1>學生後臺管理系統 <small>學生數據管理中心</small></h1>
            </div>
        </div>
        <div class="row">
            <div class="jumbotron">
                <h1>學生管理系統</h1>
                <p>對學生信息進行增刪改查</p>
                <p><a class="btn btn-primary btn-lg" href="#" role="button">查看更多</a></p>
                <p><a class="btn btn-primary btn-lg" href="${pageContext.request.contextPath}/addStudent.jsp" role="button">添加學生</a></p>
            </div>
        </div>
        <div class="row">
            <table class="table table-hover table-striped">
                <tr>
                    <th>用戶編號</th>
                    <th>學號</th>
                    <th>姓名</th>
                    <th>年齡</th>
                    <th>性別</th>
                    <th>年級</th>
                    <th>專業</th>
                    <th>操作</th>
                </tr>
                <c:forEach var="student"  items="${studentList}">
                <tr>
                    <td>${student.id}</td>
                    <%--<td>${user.username}</td>--%>
                    <td>${student.reg_no}</td>
                    <td>${student.name}</td>
                    <td>${student.age}</td>
                    <td>${student.sex}</td>
                    <td>${student.grade}</td>
                    <td>${student.major}</td>
                    <td><a href="SelectStudentById?id=${student.id}">查看</a></td>
                </tr>
                </c:forEach>
            </table>
        </div>
    </div>
    </body>
    </html>
    <!--
    -->

  7. 測試技術分享圖片

Mybatis環境搭建