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

来源:互联网 发布:php开发实例大全怎么样 编辑:程序博客网 时间:2024/06/08 19:32

本项目代码在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.Driverjdbc.url = jdbc:mysql://127.0.0.1/demo?characterEncoding=UTF-8jdbc.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层,用于与数据库交互

@Componentpublic 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使用

@Servicepublic 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形式返回

@Controllerpublic 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,结果如下:


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


阅读全文
0 0
原创粉丝点击