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&characterEncoding=UTF-8&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 服務器