您的位置:首页 > 编程语言 > Java开发

使用Intellij IDEA通过Maven+Hibernate+Spring Mvc构建Java后台

2017-06-11 21:43 691 查看
本项目代码在https://github.com/SysuCodeMan/SpringMVC-Hibernate-IntellijIDEA

一、使用Intellij创建Maven工程,勾选Create from archetype,选择webapp那一项



填写组织名称和包名,之后就一路Next可以了



之后Maven会自动下载一系列的依赖,等待。。。下载结束后在main文件夹下新建一个Java文件夹,并右键Mark As选择Sources Root,最终的目录结构应为:



二、在pom.xml中加入SpringMVC和Hibernate以及相关MySQL的驱动还有Json解析器等依赖:

<properties>
<java-version>1.8</java-version>
<org.springframework-version>4.2.6.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>

<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.4.RELEASE</version>
</dependency>

<!-- spring orm -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.2.3.RELEASE</version>
</dependency>

<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.5.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.5.Final</version>
</dependency>

<!-- datasource源jar相关 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>

<!-- Gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.1</version>
</dependency>

<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>

<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--FastJson-->

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.9</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
</dependencies>


三、编写SpringMVC和Hibernate的配置文件,最终的文件目录结构为:



1.其中root-context的主要信息可以为空

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
<!-- Root Context: defines shared resources visible to all other web components -->
</beans>

  2.重点是servlet-context,存放了SpringMVC以及Hibernate的配置信息

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>

<context:component-scan base-package="com.chris" />

<!-- 配置hibernate与datasource,datasource使用apache dbcp管理 -->
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"><!-- 设置为close使Spring容器关闭同时数据源能够正常关闭,以免造成连接泄露 -->
<beans:property name="driverClassName" value="${jdbc.driver}" />
<beans:property name="url" value="${jdbc.url}" />
<beans:property name="username" value="${jdbc.username}" />
<beans:property name="password" value="${jdbc.password}" />
<beans:property name="defaultReadOnly" value="false" /><!-- 设置为只读状态,配置读写分离时,读库可以设置为true
在连接池创建后,会初始化并维护一定数量的数据库安连接,当请求过多时,数据库会动态增加连接数,
当请求过少时,连接池会减少连接数至一个最小空闲值 -->
<beans:property name="initialSize" value="0" /><!-- 在启动连接池初始创建的数据库连接,默认为0 -->
<beans:property name="maxActive" value="20" /><!-- 设置数据库同一时间的最大活跃连接默认为8,负数表示不闲置 -->
<beans:property name="maxIdle" value="15"/><!-- 在连接池空闲时的最大连接数,超过的会被释放,默认为8,负数表示不闲置 -->
<beans:property name="minIdle" value="0" /><!-- 空闲时的最小连接数,低于这个数量会创建新连接,默认为0 -->
<beans:property name="maxWait" value="20000" /><!--连接被用完时等待归还的最大等待时间,单位毫秒,超出时间抛异常,默认为无限等待 -->
</beans:bean>

<!-- 配置我们的会话工厂-->
<beans:bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<beans:property name="dataSource">
<beans:ref bean="dataSource" />
</beans:property>
<beans:property name="annotatedClasses">
<beans:list>
<beans:value>com.chris.demo.entity.User</beans:value>
</beans:list>
</beans:property>
<beans:property name="hibernateProperties">
<beans:props>
<!-- MySQL的方言 -->
<beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</beans:prop>
<beans:prop key="javax.persistence.validation.mode">none</beans:prop>
<!-- 必要时在数据库新建所有表格 -->
<beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
<beans:prop key="hibernate.show_sql">true</beans:prop>
<!-- 配置current session的上下文环境,方便我们调用sessionFactory获取当前线程统一个session对象 -->
<beans:prop key="current_session_context_class">thread</beans:prop>
<!-- 用更漂亮的格式显示sql语句-->
<!-- <prop key="hibernate.format_sql">true</prop> -->
</beans:props>
</beans:property>
<beans:property name="packagesToScan" value="com.chris"></beans:property>
</beans:bean>

<!-- db connection -->
<beans:bean id="DBconfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<beans:property name="locations">
<beans:value>classpath:dbconn.properties</beans:value>
</beans:property>
</beans:bean>

<beans:bean id = "userDAO" class="com.chris.demo.dao.UserDAO">
<beans:property name="sessionFactory" ref="sessionFactory"></beans:property>
</beans:bean>

<beans:bean id = "userService" class="com.chris.demo.service.UserService">
<beans:property name="userDAO" ref="userDAO"></beans:property>
</beans:bean>

<beans:bean id ="transmanager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<beans:property name="sessionFactory" ref="sessionFactory"></beans:property>
</beans:bean>
</beans:beans>


 注意其中最后的dbconn.properties是连接数据库时使用的驱动、用户名、密码等信息,在resource文件夹下新建文件即可

jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1/demo?characterEncoding=UTF-8
jdbc.username = //实际用户名jdbc.password = //实际密码


其中内容为,数据库的url以及username和password属性根据实际而定

四、创建数据库表

sql脚本文件如下:

CREATE SCHEMA IF NOT EXISTS `demo`;

CREATE TABLE IF NOT EXISTS `demo`.`user` (
`userId` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(50) NOT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

使用MySQL WorkBench执行后结果如下



五、在项目中创建与数据库表对应的Java实体类,使用Hibernate的注解使之与数据库中的字段一一对应:

@Entity
@Table(name="user")
public class User {
private Integer userId;
private String username;
private String password;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="userId")
public Integer getUserId() {
return userId;
}

public void setUserId(Integer userId) {
this.userId = userId;
}

@Basic
@Column(name="username")
public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

@Basic
@Column(name = "password")
public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}


 六、编写DAO层,用于与数据库交互

@Component
public class UserDAO {
@Autowired
private SessionFactory sessionFactory;
private Session session;

public void add(User user) {
session = sessionFactory.openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
}

public SessionFactory getSessionFactory() {
return sessionFactory;
}

public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}

七、编写Service层封装服务,供Controller使用

@Service
public class UserService {
@Autowired
UserDAO userDAO;

public void add(User user) {
userDAO.add(user);
}

public UserDAO getUserDAO() {
return userDAO;
}

public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}

 八、编写Controller,用于处理请求,这里接收一个GET方法,在数据库中添加一个 用户,最后将添加的用户以Json形式返回

@Controller
public class UserController {
@Autowired
private UserService userService;

@ResponseBody
@RequestMapping(value = "/add", method = RequestMethod.GET)
public User add(String username, String password) {
User user = new User();
user.setUsername(username);
user.setPassword(password);
userService.add(user);
return user;
}

}

九、部署到Tomcat上,Intellij部署Tomcat十分方便,另有文章介绍,不再赘述,最后在浏览器访问localhost:8080/add?username=test&password=123,结果如下:



十、查看数据库,可以看到数据成功插入

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐