引用基础依赖库
1 <packaging>pom</packaging> <!--定义子pom对父pom的依赖引入-->
2 <properties>
3 <!-- 定义所有第三方依赖库的版本白拿后 -->
4 <javax.servlet-api.version>4.0.1</javax.servlet-api.version>
5 <javax.servlet.jsp-api.version>2.3.3</javax.servlet.jsp-api.version>
6 <junit.version>4.12</junit.version>
7 <jstl.version>1.2</jstl.version>
8 <mybatis.version>3.5.1</mybatis.version>
9 <mysql.version>5.1.47</mysql.version>
10 <!-- 定义项目构建的相关环境属性 -->
11 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12 <maven.compiler.source>1.10</maven.compiler.source>
13 <maven.compiler.target>1.10</maven.compiler.target>
14 <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
15 <maven-source-plugin.version>3.0.1</maven-source-plugin.version>
16 <maven-javadoc-plugin.version>3.1.0</maven-javadoc-plugin.version>
17 <maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
18 <!-- 定义资源与profile配置 -->
19 <profiles.dir>src/main/profiles</profiles.dir> <!-- 定义profiles父路径 -->
20 <resources.dir>src/main/resources</resources.dir> <!-- 定义resources父路径 -->
21 <java.dir>src/main/java</java.dir> <!-- 定义java父路径 -->
22 </properties>
23 <profiles> <!-- 明确的进行具体的资源名称的配置,这个名称是在maven打包的时候使用的名称 -->
24 <profile> <!-- 定义具体的profile引用名称 -->
25 <id>dev</id> <!-- 定义profile名称为dev -->
26 <properties> <!-- 定义当前的profile属性名称 -->
27 <profile.dir>${profiles.dir}/dev</profile.dir>
28 </properties>
29 <activation> <!-- 如果在编译的时候没有设置任何的profile名字,则此配置生效 -->
30 <activeByDefault>true</activeByDefault> <!-- 默认打包环境 -->
31 </activation>
32 </profile>
33 <profile> <!-- 定义具体的profile引用名称 -->
34 <id>test</id> <!-- 定义profile名称为test -->
35 <properties>
36 <profile.dir>${profiles.dir}/test</profile.dir>
37 </properties>
38 </profile>
39 <profile> <!-- 定义具体的profile引用名称 -->
40 <id>product</id> <!-- 定义profile名称为product -->
41 <properties>
42 <profile.dir>${profiles.dir}/product</profile.dir>
43 </properties>
44 </profile>
45 </profiles>
46 <dependencyManagement>
47 <dependencies>
48 <dependency>
49 <groupId>mysql</groupId>
50 <artifactId>mysql-connector-java</artifactId>
51 <version>${mysql.version}</version>
52 </dependency>
53 <dependency>
54 <groupId>org.mybatis</groupId>
55 <artifactId>mybatis</artifactId>
56 <version>${mybatis.version}</version>
57 </dependency>
58 <dependency>
59 <groupId>junit</groupId>
60 <artifactId>junit</artifactId>
61 <version>${junit.version}</version>
62 <scope>test</scope>
63 </dependency>
64 <dependency>
65 <groupId>javax.servlet</groupId>
66 <artifactId>javax.servlet-api</artifactId>
67 <version>${javax.servlet-api.version}</version>
68 <scope>provided</scope>
69 </dependency>
70 <dependency>
71 <groupId>javax.servlet.jsp</groupId>
72 <artifactId>javax.servlet.jsp-api</artifactId>
73 <version>${javax.servlet.jsp-api.version}</version>
74 <scope>provided</scope>
75 </dependency>
76 <dependency>
77 <groupId>javax.servlet.jsp.jstl</groupId>
78 <artifactId>jstl</artifactId>
79 <version>${jstl.version}</version>
80 </dependency>
81 </dependencies>
82 </dependencyManagement>
2.在资源文件resources下建立文件mybatis/mybatis.cfg.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>
<environments default="mysqlDev"> <!-- 定义数据库连接的相关配置 -->
<environment id="mysqlDev"> <!-- 配置MySQL数据库连接 -->
<transactionManager type="jdbc"/> <!-- 事务控制类型 -->
<dataSource type="POOLED"> <!-- 使用连接池的模式管理连接 -->
<property name="driver" value="org.gjt.mm.mysql.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/数据库名" />
<property name="username" value="root" />
<property name="password" value="密码" />
</dataSource>
</environment>
</environments>
</configuration>
3.创建连接工厂类
package com.lion.mybatis.util;
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.InputStream;
public class MyBatisSessionFactory {
private static final String CONFIG_FILE = "mybatis/mybatis.cfg.xml";
private static SqlSessionFactory sessionFactory ;
private static final ThreadLocal<SqlSession> SESSION_THREAD_LOCAL = new ThreadLocal<>();
static {
buildSqlSessionFactory();
}
private static SqlSessionFactory buildSqlSessionFactory () {
try{
InputStream input = Resources.getResourceAsStream(CONFIG_FILE);
sessionFactory =new SqlSessionFactoryBuilder().build(input);
}catch (Exception e) {
e.printStackTrace();
}
return sessionFactory ;
}
public static SqlSession getSession() {
SqlSession session = SESSION_THREAD_LOCAL.get();
if (session == null) {
session = sessionFactory.openSession();
SESSION_THREAD_LOCAL.set(session);
}
return session;
}
public static void close() {
SqlSession session = SESSION_THREAD_LOCAL.get();
if (session != null) {
session.close();
SESSION_THREAD_LOCAL.remove();
}
}
public static SqlSessionFactory getSessionFactory() {
return sessionFactory ;
}
}
5.添加日志记录
(1)导入依赖
<log4j.version>2.11.2</log4j.version>
<slf4j.version>1.7.26</slf4j.version>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
(2)
在src/main/resources配置依赖文件log4j.properties,方法一需要定义两个文件
方法一:log4j.properties文件定义:log4j.logger.com.lion.mapper=TRACE
News.xml文件定义:<mapper namespace="com.lion.mapper.NewNS">
方法二:直接在log4j.properties文件中定义:log4j.logger.com.lion.mapper.NewsNS=TRACE
# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
# For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
log4j.rootLogger=INFO, stdout, logfile
log4j.logger.com.lion.mapper.NewsNS=TRACE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=logs/my.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
6.设置别名
在mybatis.cfg.xml里设置,随着类的增多,避免手动定义,我们通常设置为第二种方法
方法一:<typeAliases><!--别名设置,放置在环境配置environments上方--> <typeAlias type="com.lion.mybatis.vo.News" alias="News"/> </typeAliases>
方法二:<typeAliases> <!-- 扫描指定包下的类,类名称就是别名 -->
<package name="com.lion.mybatis.vo"/>
</typeAliases>
7.获取主键,修改News.xml配置文件
方法一:
keyProperty="nid" :当前vo类属性名称
keyColumn="nid" :主键列(如果列名称和属性名称相同可以不写此配置)
useGeneratedKeys="true" :进行主键的生成操作
<insert id="doCreate" parameterType="News" keyProperty="nid" keyColumn="nid" useGeneratedKeys="true">
方法二:
<insert id="doCreate" parameterType="News"> INSERT INTO news(title,content) VALUES (#{title},#{content}) ; <selectKey keyColumn="nid" keyProperty="nid" order="AFTER" resultType="java.lang.Long"> SELECT LAST_INSERT_ID() </selectKey> </insert>
keyProperty="nid" :当前vo类属性名称
keyColumn="nid" :主键列(如果列名称和属性名称相同可以不写此配置)
resultType="java.lang.Long" :逐渐查询后返回的数据类型
order="AFTER" : 描述语句出现位置,增加之前(BEFORE),增加之后(AFTER);
|-如果是Mysql数据库,是增加之后获取增长的ID;
|-如果是Oracle数据库,使用序列模式,需要在增加之前获取增长的ID;