1. 项目的总体框架
以数据库表user为模型,domain表示实体域(用来创建用户表对应实体字段)、dao持久层(包含持久层的接口以及持久层的实现类)、service业务层(包含业务层的接口以及业务层的实现类)。
(1) user用户表
(2) 项目架构 [两层架构+实体域)
2. maven工程所需要的jar包
1. 导入spring的jar包:spring-context
和spring-test
2. 连接数据库的mysql驱动包mysql-connector-java
3. 管理数据库的工具:数据库连接池c3p0
4. 操作数据库的工具:commons-dbutils
5. 取代set、get、toString()方法:lombok
6. 单元测试工具:junit
7. 日志输出工具:log4j
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zyj</groupId>
<artifactId>spring-study-day0827</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3. 类路径resources下的配置文件
- bean.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"
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">
<context:component-scan base-package="com.zyj"/>
<bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner">
<constructor-arg name="ds" ref="dataSource"/>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1/springdb?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true"/>
<property name="user" value="root"/>
<property name="password" value="123456"/>
</bean>
</beans>
- 日志输出到控制台配置文件:log4j.properties
### 设置###
log4j.rootLogger = debug,stdout
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
4. 主体代码块
4.1 实体类(对应数据库中的user表)
package com.zyj.domain;
import lombok.Data;
@Data
public class User {
private int id;
private String name;
private String address;
}
4.2 持久层(接口+实现类)
(1)接口:定义了增、删、改、查四种方法
package com.zyj.dao;
import com.zyj.domain.User;
public interface IUserDao {
/**
* 定义增删改查方法
*/
void insertUser(User user);
void deleteUserById(int id);
void updateUser(User user);
User findUserById(int id);
}
(2)实现接口的实现类
package com.zyj.dao.Impl;
import com.zyj.dao.IUserDao;
import com.zyj.domain.User;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class IUserDaoImpl implements IUserDao {
@Autowired
private QueryRunner queryRunner;
public void insertUser(User user) {
try{
queryRunner.update("insert into user(name,address) values (?,?)",user.getName(),user.getAddress());
}catch (Exception e){
throw new RuntimeException(e);
}
}
public void deleteUserById(int id) {
try{
queryRunner.update("delete from user where id=?",id);
}catch (Exception e){
throw new RuntimeException(e);
}
}
public void updateUser(User user) {
try{
queryRunner.update("update user set name=?,address=? where id=?",user.getName(),user.getAddress(),user.getId());
}catch (Exception e){
throw new RuntimeException(e);
}
}
public User findUserById(int id) {
try{
return queryRunner.query("select * from userwhere id=?",new BeanHandler<User>(User.class),id);
}catch (Exception e){
throw new RuntimeException(e);
}
}
}
4.3 业务层(接口+实现类)
(1)业务层接口
package com.zyj.service;
import com.zyj.domain.User;
public interface IUserService {
void insertUser(User user);
void deleteUserById(int id);
void updateUser(User user);
User findUserById(int id);
}
(2)业务层的实现类
package com.zyj.service.Impl;
import com.zyj.dao.IUserDao;
import com.zyj.domain.User;
import com.zyj.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserServiceImpl implements IUserService {
@Autowired
IUserDao userDao;
public void insertUser(User user) {
userDao.insertUser(user);
}
public void deleteUserById(int id) {
userDao.deleteUserById(id);
}
public void updateUser(User user) {
userDao.updateUser(user);
}
public User findUserById(int id) {
return userDao.findUserById(id);
}
}
5. 测试类
package com.zyj;
import com.zyj.domain.User;
import com.zyj.service.IUserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:bean.xml")
public class UserTest {
@Autowired
private IUserService as;
@Test
public void testFindById(){
System.out.println(as.findUserById(1));
}
@Test
public void testInsertUser(){
User user = new User();
user.setId(4);
user.setName("赵六");
user.setAddress("香港");
as.insertUser(user);
}
@Test
public void testDeleteUserById(){
as.deleteUserById(8);
}
@Test
public void testUpdateUser(){
User user = new User();
user.setId(2);
user.setAddress("上海市");
user.setName("李四");
as.updateUser(user);
}
}
6. 总结
本篇博文主要是介绍了使用注解的方式来完成与数据进行交互的简单项目,对于具体注解的讲解以及使用xml文件配置会在后续介绍。