11.整合mybatis方式(2)
使用JNDI需要在Tomcat下的conf下的context.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http:
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--<Manager pathname="" />-->
<!--<Environment name="test" value="study jspweb" type="java.lang.String" />-->
<Environment name="t133JNDI" value="学习JNDI" type="java.lang.String" />
<!--<Resource name="jdbc/bookshopplus" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/bookshopplus?
useUnicode=true&characterEncoding=utf-8" />-->
<Resource
name="jdbc/cvs_db"
auth="Container"
type="javax.sql.DataSource"
maxTotal="100"
maxIdle="30"
maxWaitMillis="10000"
username="root"
password="root"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/cvs_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"/>
</Context>
SysUserMapper
package cn.cvs.mapper;
import cn.cvs.pojo.SysUser;
import java.util.List;
public interface SysUserMapper {
List<SysUser> selectUserList();
int insert(SysUser sysUser);
}
SysUserMapperImpl
package cn.cvs.mapper;
import cn.cvs.pojo.SysUser;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class SysUserMapperImpl implements SysUserMapper {
private SqlSessionTemplate sqlSession;
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public List<SysUser> selectUserList() {
return sqlSession.getMapper(SysUserMapper.class).selectUserList();
}
@Override
public int insert(SysUser sysUser) {
return sqlSession.getMapper(SysUserMapper.class).insert(sysUser);
}
}
SysUserMapper
<?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="cn.cvs.mapper.SysUserMapper">
<select id="selectUserList" resultType="SysUser">
SELECT * FROM `t_sys_user`
</select>
<insert id="insert" parameterType="SysUser">
INSERT INTO `cvs_db`.`t_sys_user` (
`id`,
`account`,
`realName`,
`password`,
`sex`,
`birthday`,
`phone`,
`address`,
`roleId`,
`createdUserId`,
`createdTime`
)
VALUES
(
null,
#{account},
#{realName},
#{password},
#{sex},
#{birthday},
#{phone},
#{address},
#{roleId},
#{createdUserId},
#{createdTime});
</insert>
</mapper>
SysUser
package cn.cvs.pojo;
import lombok.Data;
import java.util.Date;
public class SysUser {
private Integer id;
private String account;
private String realName;
private String password;
private Integer sex;
private Date birthday;
private String phone;
private String address;
private Integer roleId;
private Integer createdUserId;
private Date createdTime;
private Integer updatedUserId;
private Date updatedTime;
private Integer age;
private String roleIdName;
public Integer getAge() {
Date date = new Date();
Integer age = date.getYear() - birthday.getYear();
return age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public Integer getCreatedUserId() {
return createdUserId;
}
public void setCreatedUserId(Integer createdUserId) {
this.createdUserId = createdUserId;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public Integer getUpdatedUserId() {
return updatedUserId;
}
public void setUpdatedUserId(Integer updatedUserId) {
this.updatedUserId = updatedUserId;
}
public Date getUpdatedTime() {
return updatedTime;
}
public void setUpdatedTime(Date updatedTime) {
this.updatedTime = updatedTime;
}
public void setAge(Integer age) {
this.age = age;
}
public String getRoleIdName() {
return roleIdName;
}
public void setRoleIdName(String roleIdName) {
this.roleIdName = roleIdName;
}
@Override
public String toString() {
return "SysUser{" +
"id=" + id +
", account='" + account + '\'' +
", realName='" + realName + '\'' +
", password='" + password + '\'' +
", sex=" + sex +
", birthday=" + birthday +
", phone='" + phone + '\'' +
", address='" + address + '\'' +
", roleId=" + roleId +
", createdUserId=" + createdUserId +
", createdTime=" + createdTime +
", updatedUserId=" + updatedUserId +
", updatedTime=" + updatedTime +
", age=" + age +
", roleIdName='" + roleIdName + '\'' +
'}';
}
}
SysUserService
package cn.cvs.service;
import cn.cvs.pojo.SysUser;
import java.util.List;
public interface SysUserService {
List<SysUser> selectUserList();
int insert(SysUser sysUser) throws Exception;
}
SysUserServiceImpl
package cn.cvs.service.impl;
import cn.cvs.mapper.SysUserMapper;
import cn.cvs.pojo.SysUser;
import cn.cvs.service.SysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional
public class SysUserServiceImpl implements SysUserService {
@Autowired
private SysUserMapper sysUserMapper;
public void setSysUserMapper(SysUserMapper sysUserMapper) {
this.sysUserMapper = sysUserMapper;
}
@Override
public List<SysUser> selectUserList() {
return sysUserMapper.selectUserList();
}
@Override
public int insert(SysUser sysUser) {
int result = 0;
try {
result = sysUserMapper.insert(sysUser);
throw new RuntimeException("模拟异常");
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
}
SysUserServlet
package cn.cvs.servlet;
import cn.cvs.pojo.SysUser;
import cn.cvs.service.SysUserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/SysUserServlet")
public class SysUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
SysUserService sysUserServiceImpl = context.getBean("sysUserServiceImpl", SysUserService.class);
List<SysUser> sysUsers = sysUserServiceImpl.selectUserList();
request.setAttribute("sysList",sysUsers);
request.getRequestDispatcher("index.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
index.jsp
<%@ page import="java.util.List" %>
<%@ page import="cn.cvs.pojo.SysUser" %>
<%@ page import="lombok.val" %><%--
Created by IntelliJ IDEA.
User: 111
Date: 2021-12-15
Time: 9:35
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
List<SysUser> sysUsers = (List<SysUser>) request.getAttribute("sysList");
for (int i = 0; i <sysUsers.size() ; i++) {
System.out.println(sysUsers.get(i).getRoleIdName());
}
%>
</body>
</html>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<context:property-placeholder location="classpath:db.properties"/>
<!-- 1.配置Spring管理数据源(DBCP) destroy-method=”close”的作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--jndl配置-->
<!--通过JNDI配置DataSource-->
<!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">-->
<!-- <!–通过jndiName指定引用的JNDI数据源名称–>-->
<!-- <property name="jndiName">-->
<!-- <value>java:comp/env/jdbc/cvs_db</value>-->
<!-- </property>-->
<!-- </bean>-->
<!-- 2.配置SqlSessionFactoryBean 创建对象的过程全部交给spring来做-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<!--2.1配置数据源组件-->
<property name="dataSource" ref="dataSource"/>
<!--2.2配置别名-->
<property name="typeAliasesPackage" value="cn.cvs.pojo"></property>
<!--2.3配置mapper映射文件的位置-->
<!-- <property name="mapperLocations" value="classpath:cn/cvs/mapper/*Mapper.xml"></property>-->
<!--2.4可直接引入mybatis配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<!-- 3.配置SqlSessionTemplate-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean>
<!-- 4.mapper配置扫描-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.cvs.mapper"></property>
</bean>
<!--4.扫描指定包下的Bean-->
<context:component-scan base-package="cn.cvs.mapper,cn.cvs.service"></context:component-scan>
<!--5.定义事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven></tx:annotation-driven>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" propagation="SUPPORTS"/>
<tx:method name="ins*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="upd*" propagation="REQUIRED"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--置AOP-->
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* cn.cvs.service..*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"></aop:advisor>
</aop:config>
</beans>
db.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:
jdbc.username=root
jdbc.password=root
log4j.properties
log4j.rootLogger=DEBUG,CONSOLE,file
#log4j.rootLogger=ERROR,ROLLING_FILE
log4j.logger.cn.cvs.dao=debug
log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
log4j.logger.java.sql.ResultSet=debug
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug
####################################################################################
# ־�ڿ����������
####################################################################################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=error
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n
####################################################################################
####################################################################################
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=error
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L)%m%n
log4j.logger.com.opensymphony.xwork2=error
mybatis-config.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>
<!--配置日志-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
<setting name="autoMappingBehavior" value="FULL"/>
</settings>
<!--配置别名-->
<!-- <typeAliases>-->
<!-- <package name="cn.cvs.pojo"/>-->
<!-- </typeAliases>-->
<!-- <environments default="development">-->
<!-- <environment id="development">-->
<!-- <transactionManager type="JDBC"/>-->
<!-- <dataSource type="POOLED">-->
<!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>-->
<!-- <property name="url"-->
<!-- value="jdbc:mysql://localhost:3306/cvs_db?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimeZone=UTC"/>-->
<!-- <property name="username" value="root"/>-->
<!-- <property name="password" value="root"/>-->
<!-- </dataSource>-->
<!-- </environment>-->
<!-- </environments>-->
<!-- <mappers>-->
<!-- <mapper resource="cn/cvs/mapper/SysUserMapper.xml"></mapper>-->
<!-- <!–<package name="cn.cvs.mapper"/>–>-->
<!-- </mappers>-->
</configuration>
pom.xml
<dependencies>
<!-- https:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<!--单元测试包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<!--mybatis包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--spring-webmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.13</version>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.13</version>
</dependency>
<!--aop植入包-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<!--导入mybatis-Spring-->
<!-- https:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<!-- dbcp-->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>