1、构建pom.xml
<?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.yzh.maven</groupId>
<artifactId>myspringboothibernatejpapro</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>myspringboothibernatejpapro</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<tomcat.version>8.5.0</tomcat.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- oracle驱动包 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.1.0</version>
</dependency>
<!--data source spring data jpa 需要用c3p0 连接池-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- druid数据源连接 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>jconsole</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>tools</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<!-- 集成swaggerUI -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<!-- web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- servlet 依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- tomcat 的支持 .-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!-- 集成mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!--日志打印
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.6.2</version>
</dependency> -->
<!-- mybatis分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.2.1</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>struts</groupId>
<artifactId>struts</artifactId>
<version>1.2.9</version>
<exclusions>
</exclusions>
</dependency>
<!-- fastjson工具依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>jasper</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
<resources>
<!-- 打包时将jsp文件拷贝到META-INF目录下-->
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/webapp</directory>
<!--注意此次必须要放在此目录下才能被访问到-->
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
<!-- Allow access to Spring milestones and snapshots -->
<!-- (you don't need this if you are using anything after 0.5.0.RELEASE) -->
<repositories>
<repository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
</project>
2、配置yml文件
(1)application.yml
#激活application-dev的yml文件,被激活文件的命名方式为application-激活后缀
spring:
profiles:
active: dev
3、application-dev.yml
#配置端口
server_port: 8988
# Hibernate 相关配置
spring:
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.OracleDialect # 方言
#数据池
dbcp:
max-active: 20
max-wait: 60000
initial-size: 1
min-idle: 1
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
test-while-idle: true
test-on-borrow: false
test-on-return: false
#jsp视图解析渲染
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
#数据库驱动
ms:
db:
driverClassName: oracle.jdbc.driver.OracleDriver
#url
url: jdbc:oracle:thin:@localhost:1521:orcl
#用户名
username: test
#用户密码
password: a
maxActive: 500
#自动建表采用update的方式
auto_create:
table: update
#是否显示sql
my:
show_sql: true
4、构建UserInfo实体类
package com.yzh.maven.entity;
import com.yzh.maven.base.entity.Entity;
import javax.persistence.*;
import java.io.Serializable;
//表示这是一个实体bean,类似于@Service
@javax.persistence.Entity
@Table(name="userinfo",schema="TEST")
public class UserInfo extends Entity<UserInfo> implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
@Column(name = "userid")
private int userId;
@Column(name = "username")
private String userName;
private String password;
private int age;
private String sex;
private String tel;
private String email;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public UserInfo(String userName, String password, int age, String sex,
String tel, String email) {
super();
this.userName = userName;
this.password = password;
this.age = age;
this.sex = sex;
this.tel = tel;
this.email = email;
}
public UserInfo() {
super();
}
@Override
public int compareTo(UserInfo u) {
if(this == u){
return 0;
}else{
if(userName.compareTo(u.getUserName()) > 0){
return 1;
}else if(userName.compareTo(u.getUserName()) == 0){
return 0;
}else{
return -1;
}
}
}
@Override
public String toString() {
return "UserInfo [userName=" + userName + ", password=" + password
+ ", age=" + age + ", sex=" + sex + ", tel=" + tel + ", email="
+ email + "]";
}
}
5、构建数据池(源)配置工具类
package com.yzh.maven.config;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import java.beans.PropertyVetoException;
/**
* Created by Administrator on 2018/9/14 0014.
*/
@Configuration
public class DBConfig {
@Autowired
private Environment env;
@Bean(name="dataSource")
public ComboPooledDataSource dataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
//获取yml文件中的基本信息并设置到dataSource对象中
dataSource.setDriverClass(env.getProperty("ms.db.driverClassName"));
dataSource.setJdbcUrl(env.getProperty("ms.db.url"));
dataSource.setUser(env.getProperty("ms.db.username"));
dataSource.setPassword(env.getProperty("ms.db.password"));
//设置连接池信息,这些信息我们也可以配置在yml文件中的
dataSource.setMaxPoolSize(20);
dataSource.setMinPoolSize(5);
dataSource.setInitialPoolSize(10);
dataSource.setMaxIdleTime(300);
dataSource.setAcquireIncrement(5);
dataSource.setIdleConnectionTestPeriod(60);
return dataSource;
}
}
6、编写资源文件、yml文件属性映射类(解决打jar包时不兼容的问题)
package com.yzh.maven.entity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.stereotype.Repository;
/**
* Created by Administrator on 2018/9/14 0014.
*/
@Repository
public class ApplicationProperties extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer {
@Value("${auto_create.table}")
private String isCreateTable;
@Value("${my.show_sql}")
private boolean isShowSql;
@Value("${server_port}")
private int server_port;
public String getIsCreateTable() {
return isCreateTable;
}
public void setIsCreateTable(String isCreateTable) {
this.isCreateTable = isCreateTable;
}
public boolean isShowSql() {
return isShowSql;
}
public void setShowSql(boolean showSql) {
isShowSql = showSql;
}
public ApplicationProperties() {
}
public int getServer_port() {
return server_port;
}
public void setServer_port(int server_port) {
this.server_port = server_port;
}
//设置端口(服务器启动时调用)
@Override
public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {
configurableEmbeddedServletContainer.setPort(this.server_port);
}
}
7、编写Jpa工具类
package com.yzh.maven.config;
import com.yzh.maven.entity.ApplicationProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Administrator on 2018/9/14 0014.
*/
@Configuration
//此处是你dao文件所在的包名
@EnableJpaRepositories("com.yzh.*.dao")
@EnableTransactionManagement
public class JpaConfig {
@Autowired
private DataSource dataSource;
@Autowired
private ApplicationProperties applicationProperties;
@Bean
public EntityManagerFactory entityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
//此处com.example.*.model是你的java bean所在的包名
factory.setPackagesToScan("com.yzh.*.entity");
factory.setDataSource(dataSource);
Map<String, Object> jpaProperties = new HashMap<>();
jpaProperties.put("hibernate.ejb.naming_strategy", "org.hibernate.cfg.ImprovedNamingStrategy");
jpaProperties.put("hibernate.jdbc.batch_size", 50);
//自动创建表
jpaProperties.put("hibernate.hbm2ddl.auto", applicationProperties.getIsCreateTable());
//是否打印sql执行语句
jpaProperties.put("hibernate.show_sql",applicationProperties.isShowSql());
factory.setJpaPropertyMap(jpaProperties);
factory.afterPropertiesSet();
return factory.getObject();
}
@Bean
public PlatformTransactionManager transactionManager() {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory());
return txManager;
}
}
说明:@EnableJpaRepositories该注解就相当于SpringData Jpa在Spring+springMVC+springData+hibernate中的如下配置:
<jpa:repositories base-package="com.yzh.maven" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/>
@EnableJpaRepositories注解用于Srping JPA的repository持久化接口的配置,用于取代xml形式的配置文件。
8、编写持久化接口
package com.yzh.maven.dao;
import com.yzh.maven.entity.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
/**
*
* @author
*/
public interface UserInfoDao extends JpaRepository<UserInfo,Integer>{
/**
* 查询所有
* @return
*/
@Query("select u from UserInfo u")
public List<UserInfo> findAll();
}
9、编写service接口
package com.yzh.maven.service;
import com.yzh.maven.base.plugin.Pagination;
import com.yzh.maven.entity.UserInfo;
import java.util.List;
/**
*
* @author
*/
public interface UserInfoService{
/**
* 添加
* @param User
*/
public void addUser(UserInfo User);
/**
* 删除
* @param id
*/
public void removeUser(String id);
/**
* 保存或修改
* @param User
*/
public void saveOrUpdateUser(UserInfo User);
/**
* 根据id查询单个
* @param id
* @return
*/
public UserInfo findById(String id);
/**
* 根据用户名查询
* @param id
* @return
*/
public UserInfo findByUsername(String username);
/**
* 查询所有
* @return
*/
public List<UserInfo> findAll();
/**
* 分页查询
* @return
*/
public void queryPage(Pagination<UserInfo> pagination);
}
10、编写service接口实现类
package com.yzh.maven.service.impl;
import com.yzh.maven.abstracts.EntityAbstract;
import com.yzh.maven.dao.UserInfoDao;
import com.yzh.maven.entity.UserInfo;
import com.yzh.maven.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserInfoServiceImpl extends EntityAbstract<UserInfo> implements UserInfoService {
@Autowired
public UserInfoDao userInfoDao;
@Override
public void addUser(UserInfo userInfo) {
}
@Override
public void removeUser(String id) {
}
@Override
public void saveOrUpdateUser(UserInfo User) {
}
@Override
public UserInfo findById(String id) {
return null;
}
@Override
public UserInfo findByUsername(String username) {
return null;
}
@Override
public List<UserInfo> findAll() {
return userInfoDao.findAll();
}
}
11、测试
package com.yzh.maven.controller;
import com.yzh.maven.base.model.DataMessage;
import com.yzh.maven.base.plugin.Pagination;
import com.yzh.maven.entity.UserInfo;
import com.yzh.maven.service.UserInfoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @FileName UserInfoController.java
* @Description: 用户信息操作Controller
* @Date 2018年8月31日
* @author yzh
* @version 1.0.3
*
*/
@Controller
@RequestMapping("/list")
public class UserInfoController {
@Autowired
private UserInfoService userInfoService;
/**
* @functionName: listUserInfos
* @description: 分页查询
* @param pageParams
* @author yzh
* @date 2018年8月31日
*/
private static final Logger LOG = LoggerFactory.getLogger(UserInfoController.class);
@ResponseBody
@RequestMapping(value = "/listUserInfos.action")
public DataMessage listUserInfos(Pagination<UserInfo> pageParams) throws Exception {
userInfoService.queryPage(pageParams);
return DataMessage.successData(pageParams);
}
@GetMapping(value = "/toIndex.action")
public String toIndex() {
return "/index";
}
}