MyBatis(19)- JNDI數據源

1 JNDI簡介

  • JNDI:Java Naming and Directory Interface。是SUN公司推出的一套規範,屬於JavaEE技術之一。目的是模仿windows系統中的註冊表。
  • 在服務器中註冊數據源

在這裏插入圖片描述

1.1 新建工程

在這裏插入圖片描述
在這裏插入圖片描述

  • pom
 <dependencies>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
    </dependency>

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

在這裏插入圖片描述

1.2 實體類

在這裏插入圖片描述
在這裏插入圖片描述

1.3 DAO

  • IUserDao
package com.tzb.dao;

import com.tzb.domain.QueryVo;
import com.tzb.domain.User;

import java.util.List;

public interface IUserDao {

    /**
     * 查詢所有用戶
     *
     * @return
     */
    List<User> findAll();

    /**
     * 保存用戶
     *
     * @param user
     */
    void saveUser(User user);

    /**
     * 更新用戶
     *
     * @param user
     */
    void updateUser(User user);

    /**
     * 根據Id刪除用戶
     *
     * @param userId
     */
    void deleteUser(Integer userId);

    /**
     * 根據id查詢用戶信息
     *
     * @param userId
     * @return
     */
    User findById(Integer userId);

    /**
     * 根據名稱模糊查詢用戶信息
     *
     * @param username
     * @return
     */
    List<User> findByName(String username);

    /**
     * 查詢總用戶數
     *
     * @return
     */
    int findTotal();

    /**
     * 根據queryVo中的條件查詢用戶
     *
     * @param vo
     * @return
     */
    List<User> findUserByVo(QueryVo vo);
}

  • IUserDao.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.tzb.dao.IUserDao">

    <!-- 配置 查詢結果的列名和實體類的屬性名的對應關係 -->
    <resultMap id="userMap" type="uSeR">
        <!-- 主鍵字段的對應 -->
        <id property="userId" column="id"></id>
        <!--非主鍵字段的對應-->
        <result property="userName" column="username"></result>
        <result property="userAddress" column="address"></result>
        <result property="userSex" column="sex"></result>
        <result property="userBirthday" column="birthday"></result>
    </resultMap>


    <!-- 查詢所有 -->
    <select id="findAll" resultMap="userMap">
        <!--select id as userId,username as userName,address as userAddress,sex as userSex,birthday as userBirthday from user;-->
        select * from user;
    </select>

    <!-- 保存用戶 -->
    <insert id="saveUser" parameterType="user">
        <!-- 配置插入操作後,獲取插入數據的id -->
        <selectKey keyProperty="userId" keyColumn="id" resultType="int" order="AFTER">
            select last_insert_id();
        </selectKey>
        insert into user(username,address,sex,birthday)values(#{userName},#{userAddress},#{userSex},#{userBirthday});
    </insert>

    <!-- 更新用戶 -->
    <update id="updateUser" parameterType="USER">
        update user set username=#{userName},address=#{userAddress},sex=#{userSex},birthday=#{userBirthday} where id=#{userId}
    </update>

    <!-- 刪除用戶-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id = #{uid}
    </delete>

    <!-- 根據id查詢用戶 -->
    <select id="findById" parameterType="INT" resultMap="userMap">
        select * from user where id = #{uid}
    </select>

    <!-- 根據名稱模糊查詢 -->
    <select id="findByName" parameterType="string" resultMap="userMap">
        select * from user where username like #{name}
        <!-- select * from user where username like '%${value}%'-->
    </select>

    <!-- 獲取用戶的總記錄條數 -->
    <select id="findTotal" resultType="int">
        select count(id) from user;
    </select>

    <!-- 根據queryVo的條件查詢用戶 -->
    <select id="findUserByVo" parameterType="com.tzb.domain.QueryVo" resultMap="userMap">
        select * from user where username like #{user.userName}
    </select>
</mapper>

1.4 SqlMapConfig

<?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-->
    <properties resource="jdbcConfig.properties"></properties>

    <!--使用typeAliases配置別名,它只能配置domain中類的別名 -->
    <typeAliases>
        <package name="com.tzb.domain"></package>
    </typeAliases>

    <!--配置環境-->
    <environments default="mysql">
        <!-- 配置mysql的環境-->
        <environment id="mysql">
            <!-- 配置事務 -->
            <transactionManager type="JDBC"></transactionManager>

            <!--配置連接數據庫信息-->
            <dataSource type="JNDI">
                <property name="data_source" value="java:comp/env/jdbc/mybatis-test"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 配置映射文件的位置 -->
    <mappers>
        <package name="com.tzb.dao"></package>
    </mappers>
</configuration>

  • jdbc 配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis-test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
jdbc.username=root
jdbc.password=root

1.5 新建文件夾

在這裏插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- 
<Resource 
name="jdbc/eesy_mybatis"						數據源的名稱
type="javax.sql.DataSource"						數據源類型
auth="Container"								數據源提供者
maxActive="20"									最大活動數
maxWait="10000"									最大等待時間
maxIdle="5"										最大空閒數
username="root"									用戶名
password="1234"									密碼
driverClassName="com.mysql.jdbc.Driver"			驅動類
url="jdbc:mysql://localhost:3306/eesy_mybatis"	連接url字符串
/>
 -->
<Resource 
name="jdbc/mybatis-test"
type="javax.sql.DataSource"
auth="Container"
maxActive="20"
maxWait="10000"
maxIdle="5"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mybatis-test?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false"
/>
</Context>

1.6 配置 jsp 頁面

在這裏插入圖片描述

<%@ page import="java.io.InputStream" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactoryBuilder" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactory" %>
<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="com.tzb.dao.IUserDao" %>
<%@ page import="com.tzb.domain.User" %>
<%@ page import="java.util.List" %>
<%@ page import="org.apache.ibatis.io.Resources" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<body>
<h2>Hello World!</h2>
<%
    //1.讀取配置文件
    InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
    //2.根據配置文件構建SqlSessionFactory
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory factory = builder.build(in);
    //3.使用SqlSessionFactory創建SqlSession對象
    SqlSession sqlSession = factory.openSession();
    //4.使用SqlSession構建Dao的代理對象
    IUserDao userDao = sqlSession.getMapper(IUserDao.class);
    //5.執行dao中的findAll方法
    List<User> users = userDao.findAll();
    for(User user : users){
        System.out.println(user);
    }
    //6.釋放資源
    sqlSession.close();
    in.close();
%>
</body>
</html>


啓動 tomcat 服務器
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章