book表
CREATE TABLE `mybatis`.`book`(
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ‘ID‘, `name` VARCHAR(100) NOT NULL COMMENT ‘书名‘,
`count` INT(10) NOT NULL COMMENT ‘数量‘,
PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;
新建 Maven 项目,添加 web 框架支持。
导入依赖,并在项目结构中手动添加 lib 目录。
<dependencies>
<!-- MyBatis框架 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- 数据库连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!-- C3P0连接池-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
<!-- Spring框架 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<!-- AOP -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.7</version>
</dependency>
<!-- 整合框架 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- Spring获取数据源-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.9</version>
</dependency>
<!--Servlet、JSP、JSTL-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- JUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
Book
/**
* ID
*/
private int id;
/**
* 书名
*/
private String name;
/**
* 数量
*/
private int count;
BookMapper
注意:Java 也有 Book 类,不要导错包。
public interface BookMapper {
/**
* 增加一本书
*
* @param book 待添加的书
* @return 受影响行数
*/
int insertBook(Book book);
/**
* 通过ID删除一本书
*
* @param id 待删除书ID
* @return 受影响行数
*/
int deleteBook(int id);
/**
* 更新一本书
*
* @param book 新书
* @return 受影响行数
*/
int updateBook(Book book);
/**
* 通过ID查找书
* @param id 待查找书ID
* @return 待查找书
*/
Book getBook(int id);
/**
* 查找所有书
* @return 书的列表
*/
List<Book> listBooks();
}
BookService
public interface BookService {
/**
* 增加一本书
*
* @param book 待添加的书
* @return 受影响行数
*/
int insertBook(Book book);
/**
* 通过ID删除一本书
*
* @param id 待删除书ID
* @return 受影响行数
*/
int deleteBook(int id);
/**
* 更新一本书
*
* @param book 新书
* @return 受影响行数
*/
int updateBook(Book book);
/**
* 通过ID查找书
* @param id 待查找书ID
* @return 待查找书
*/
Book getBook(int id);
/**
* 查找所有书
* @return 书的列表
*/
List<Book> listBooks();
}
BookServiceImpl
public class BookServiceImpl implements BookService{
/**
* Service层调用DAO层
*/
private BookMapper bookMapper;
public void setBookMapper(BookMapper bookMapper) {
this.bookMapper = bookMapper;
}
@Override
public int insertBook(Book book) {
return bookMapper.insertBook(book);
}
@Override
public int deleteBook(int id) {
return bookMapper.deleteBook(id);
}
@Override
public int updateBook(Book book) {
return bookMapper.updateBook(book);
}
@Override
public Book getBook(int id) {
return bookMapper.getBook(id);
}
@Override
public List<Book> listBooks() {
return bookMapper.listBooks();
}
}
BookMapper.xml:Mapper接口配置文件
注意:select 语句要求有 resultType 或 resultMap 结果集映射
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="indi.jaywee.mapper.BookMapper">
<insert id="insertBook">
insert into mybatis.book(name, count)
values (#{name}, #{count})
</insert>
<delete id="deleteBook">
delete
from mybatis.book
where id = #{id}
</delete>
<update id="updateBook">
update mybatis.book
set name = #{name},
count=#{count}
where id = #{id}
</update>
<select id="getBook" parameterType="_int" resultType="book">
select *
from mybatis.book
where id = #{id};
</select>
<select id="listBooks" resultType="book">
select *
from mybatis.book
</select>
</mapper>
db.properties:数据库配置文件
可以写成文件,也可以直接写在配置文件中。
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&useSSL=false
username=root
password=密码
mybatis-config.xml:MyBatis 配置文件
<?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>
<!-- 别名 -->
<typeAliases>
<package name="indi.jaywee.pojo"/>
</typeAliases>
<!-- 设置 -->
</configuration>
spring-mybatis.xml
数据源
sqlSessionFactory
Mapper 扫描配置器
将 Mapper 自动注入容器,省去创建 MapperImpl 的操作;
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="h说ttp://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 数据源 -->
<!-- 关联数据库配置文件-->
<context:property-placeholder location="db.properties"/>
<!-- C3P0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 数据库连接信息 -->
<property name="driverClass" value="${driver}"/>
<property name="jdbcUrl" value="${url}"/>
<property name="user" value="${username}"/>
<property name="password" value="${password}"/>
<!-- C3P0连接池的私有属性 -->
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<!-- 关闭连接后不自动提交 -->
<property name="autoCommitOnClose" value="false"/>
<!-- 获取连接超时时间 -->
<property name="checkoutTimeout" value="10000"/>
<!-- 获取连接失败重试次数 -->
<property name="acquireRetryAttempts" value="2"/>
</bean>
<!-- sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 绑定数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 绑定MyBatis配置文件 -->
<property name="configLocation" value="mybatis-config.xml"/>
<!-- 注册Mapper-->
<property name="mapperLocations" value="indi/jaywee/mapper/*.xml"/>
</bean>
<!-- SqlSessionTemplate -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定要包 -->
<property name="basePackage" value="indi.jaywee.mapper"/>
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
</beans>
spring-service.xml
添加注解支持:指定要扫描的包;
注册 Bean:注入依赖;
声明式事务;
还可以添加AOP 等配置。
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 添加注解支持 -->
<context:component-scan base-package="indi.jaywee.service"/>
<!-- 注册Bean -->
<bean id="bookServiceImpl" class="indi.jaywee.service.BookServiceImpl">
<!-- 如果bookMapper飘红,说明spring-mybatis.xml中没有扫描Mapper所在包 -->
<property name="bookMapper" ref="bookMapper"/>
</bean>
<!-- 声明式事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource"/>
</bean>
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 注册DispatcherServlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 绑定配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- 启动优先级 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 过滤乱码 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 初始化参数 -->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
springmvc-servlet.xml:
处理器映射
和处理器适配器
,annotation-driven 自动注入以上两个实例;<?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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 扫描包 -->
<context:component-scan base-package="indi.jaywee.controller"/>
<!-- 过滤静态资源 -->
<mvc:default-servlet-handler/>
<!-- 注解驱动 -->
<mvc:annotation-driven/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
到此,SSM基础框架搭建完成。
public class BookMapperTest {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
BookService bookService = context.getBean("bookService", BookService.class);
@Test
public void testInsertBook() {
Book book = new Book();
book.setName("Initial D");
book.setCount(10);
int i = bookService.insertBook(book);
if (i > 0) {
System.out.println("添加" + i + "本书");
}
}
@Test
public void testDeleteBook() {
int i = bookService.deleteBook(2);
if (i > 0) {
System.out.println("删除" + i + "本书");
}
}
@Test
public void testUpdateBook() {
Book book = new Book(1, "Jaywee Life", 9);
int i = bookService.updateBook(book);
if (i > 0) {
System.out.println("更新" + i + "本书");
}
}
@Test
public void testGetBook() {
Book book = bookService.getBook(1);
System.out.println(book);
}
@Test
public void testListBooks() {
List<Book> books = bookService.listBooks();
for (Book book : books) {
System.out.println(book);
}
}
}
原文:https://www.cnblogs.com/secretmrj/p/15150189.html