Maven搭建Mybatis-spring-springMVC项目记录
来源:互联网 发布:名校毕业生知乎 编辑:程序博客网 时间:2024/05/19 03:45
本例中用到的jar版本:
<!-- jar version control start --> <properties> <slf4j.version>1.7.24</slf4j.version> <log4j2.version>2.8.2</log4j2.version> <junit.version>4.9</junit.version> <spring.version>4.3.7.RELEASE</spring.version> <mybatis.version>3.4.5</mybatis.version> </properties> <!-- jar version control end -->
搭建Mybatis
在pom.xml中引入Mysql和Mybatis的包
<!-- MySQL stat --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- MySQL end --> <!-- Mybatis start--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- Mybatis end -->
数据库新建测试表
REATE TABLE test_user( id int primary key, name varchar(255) not null, age int);
在src/test/java/bean中新建TestUser.class
package bean;public class TestUser { private Integer id; private String name; private Integer age; public String getId(){ return id; } public void setId(Integer id){ this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { // TODO Auto-generated method stub return "ID= "+this.getId()+" NAME= "+this.getName()+" AGE= "+this.getAge(); }}
在src/test/java/mapper中新建TestUserMapper.class(这里Mybatis以接口的方式访问数据库,仅测试一个方法)
package mapper;import java.util.List;import bean.TestUser;public interface TestUserMapper { public List<TestUser> getAllUsers();}
同时在src/test/java/mapper中新建TestUserMapper.xml实现具体操作数据库的方法
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="mapper.TestUserMapper" > <!--id应该是接口中的方法名字,结果类型如没有配置别名则应该使用全名称 --> <select id="getAllUsers" resultType="bean.TestUser"> select * from test_user </select></mapper>
在src/test/resources中引入Mybatis总配置文件:mybatis-config.xml
(db.properties文件位于同目录下,记录了数据库连接的基本配置信息)
<?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> <!-- 指定数据库连接信息的位置 --> <properties resource="db.properties"></properties> <!--类型别名,如果此处没配置,那么mapper.xml中的resultType就要用全名 --> <!-- <typeAliases> <package name=""/> </typeAliases> --> <environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${mysql_driver}" /> <property name="url" value="${mysql_url}" /> <property name="username" value="${mysql_username}" /> <property name="password" value="${mysql_password}" /> </dataSource> </environment> </environments> <!-- 每个mapper.xml文件都要被注册 --> <mappers> <mapper resource="mapper/TestUserMapper.xml" /> </mappers></configuration>
在src/test/jaca/manager中新建TestUserManager测试Mybatis
package manager;import java.io.InputStream;import java.util.List;import mapper.TestUserMapper;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;import bean.TestUser;//手动加载mybatispublic class TestUserManager { private static SqlSessionFactory factory=null; public static SqlSessionFactory getSqlSessionFactory(){ if(factory==null){ // 获得环境配置文件流 InputStream config = TestUserManager.class.getClassLoader() .getResourceAsStream("mybatis-config.xml"); // 创建sql会话工厂 factory = new SqlSessionFactoryBuilder().build(config); } return factory; } //获得会话 public static SqlSession getSession(){ return getSqlSessionFactory().openSession(true); } /** * 获得得sql会话 * @param isAutoCommit 是否自动提交,如果为false则需要sqlSession.commit();rollback(); * @return sql会话 */ public static SqlSession getSession(boolean isAutoCommit){ return getSqlSessionFactory().openSession(isAutoCommit); } @Test public void testMapperInterface(){ //获得会话对象 SqlSession session=getSession(); try { //通过MyBatis实现接口BookTypeDAO,返回实例 TestUserMapper testUserMapper =session.getMapper(TestUserMapper.class); List<TestUser> userList = testUserMapper.getAllUsers(); for(TestUser user: userList){ System.err.println(user.toString()); } } finally { session.close(); } }}
运行Junit测试:
Mybatis引入成功后,Junit测试中出现错误“ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.”
原因是日志记录器没有找到log4j2的配置文件。
(log4j和log4j2有所不同,log4j配置是.properties,log4j是.xml)
pom.xml配置:
<!-- Log4j start --><dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency><!-- Log4j end -->
在src/test/resource中新建log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?><Configuration status="off" monitorInterval="1800"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> </Appenders> <Loggers> <Root level="debug"> <AppenderRef ref="Console" /> </Root> </Loggers></Configuration>
配置后再次测试:
目前项目目录结构:
===================================================
用Mybatis-generator插件
Mybatis成功引入后,考虑采用Mybatis-generator插件自动生成数据库操作接口(该步骤需要对Mybatis的配置进行改动)
在pom.xml中配置Mybatis-generator
a. 引入包mybatis-generator-core
<!-- Mybatis-generator-jar start --><dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version></dependency><!-- Mybatis-generator-jar end -->
b. 配置generator插件(在 这个节点的节点内部加入一个,同时该插件依赖了mysql驱动,mybatis核心,)
<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <executions> <execution> <id>Generate MyBatis Files</id> <goals> <goal>generate</goal> </goals> <phase>generate</phase> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> </dependencies> </plugin>
在src/test/resource中建立generatorConfig.xml
(1. classPathEntry最好指定mysql-connector-java-5.1.38.jar的绝对路径)
(2. targetProject是从项目名开始,指定到对应的包)
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" ><generatorConfiguration > <properties resource="./db.properties"/> <classPathEntry location="D:\Apache\apache-maven-3.5.0\repository\mysql\mysql-connector-java\5.1.38\mysql-connector-java-5.1.38.jar" /> <context id="mysqlTables" targetRuntime="MyBatis3"> <!-- 消除插件自动生成的垃圾注释 --> <commentGenerator> <property name="suppressAllComments" value="true" /> </commentGenerator> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="${mysql_url}" userId="${mysql_username}" password="${mysql_password}" /> <!--指定生成的类型为java类型,避免数据库中number等类型字段 --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- pojo,mapper,mapper.xml等源文件生成的路径 --> <javaModelGenerator targetPackage="bean" targetProject="categorySystem/src/test/java" /> <sqlMapGenerator targetPackage="mapper" targetProject="categorySystem/src/test/java" /> <javaClientGenerator targetPackage="mapper" targetProject="categorySystem/src/test/java" type="XMLMAPPER" /> <!-- 表信息 --> <table schema="category_system" tableName="test_user" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true"> <generatedKey column="ID" sqlStatement="MySql" identity="true" /> </table> </context></generatorConfiguration>
右键generatorConfig.xml–>Generator Mybatis/iBatis Artifacts—>运行成功后项目目录:
===================================================
整合Spring-Mybatis
需要:Mybatis-Spring/ Spring AOP/ Spring Core/ JDBC
在pom.xml中增加依赖:
<!-- Mybatis-Spring Adapter start--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!-- Mybatis-Spring Adapter end --> <!-- Spring start--> <!-- Spring core start --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- aspectJ AOP start --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency> <!-- Spring java jdbc start --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring end -->
接着在src/test/resources中新建ApplicationContext.xml,将mybatis-config.xml的配置交由spring托管,托管前mybatis-config.xml的配置如下:
<?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> <!-- 指定数据库连接信息的位置 --> <properties resource="db.properties"></properties> <!--类型别名,默认引入bean下的所有类 --> <!-- <typeAliases> <package name=""/> </typeAliases> --> <environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${mysql_driver}" /> <property name="url" value="${mysql_url}" /> <property name="username" value="${mysql_username}" /> <property name="password" value="${mysql_password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/TestUserMapper.xml" /> </mappers></configuration>
开始配置ApplicationContext.xml(配置jdbc数据源/sqlSessionFactory/注册mapper.java)
<?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:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd "> <!-- 1. 指定数据库连接信息的位置 --> <bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>db.properties</value> </property> </bean> <!-- 2. 配置数据源 --> <bean id="jdbcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${mysql_driver}"></property> <property name="url" value="${mysql_url}"></property> <property name="username" value="${mysql_username}"></property> <property name="password" value="${mysql_password}"></property> </bean> <!-- 3. 配置sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="jdbcDataSource" /> <!-- 指向mybatis-config.xml 由spring托管 --> <property name="configLocation" value="classpath:mybatis-config.xml"></property> </bean> <!-- 4. 将mapper交给spring管理 --> <bean id="testUserMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="mapper.TestUserMapper"></property> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean></beans>
注:
配置1,2相当于移植mybatis-config.xml中的节点
配置3相当于之前手动获取mybatis-config.xml:
// 获得环境配置文件流InputStream config = TestUserManager.class.getClassLoader().getResourceAsStream("mybatis-config.xml");// 创建sql会话工厂factory = new SqlSessionFactoryBuilder().build(config);
配置4相当于之前在mybatis-config.xml中配置的mapper:
<mappers> <mapper resource="mapper/TestUserMapper.xml" /></mappers>
如果有很多的表,就要对应很多的Mpper.java接口,这样每个都要在Spring中配置就太麻烦了,我们可以一次性指定需要配置的Mapper.java所在的包,默认注册的bean的id就是该接口的类名:
<!-- 4. 将mapper交给spring管理 (映射接口类自动扫描) --> <!-- <bean id="testUserMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="mapper.TestUserMapper"></property> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> <!-- 指定基础包,即自动扫描mapper这个包以及它的子包下的所有映射接口类 --> <property name="basePackage" value="mapper"></property> </bean>
我们仍旧在src/test/java/manager/TestUserManager中测试:
@Testpublic void testSpringMybatis(){ /** * 1. init spring context * 2. get mapper bean from context * 3. interact to database through mapper bean */ ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:ApplicationContext.xml"); TestUserMapper testUserMapper = ctx.getBean("testUserMapper",TestUserMapper.class); TestUser user = testUserMapper.selectByPrimaryKey(2); System.out.println(user); }
执行后:
此时ApplicationContext.xml是需要手动去加载的,我们可以在web.xml中配置Spring的IOC容器,通过这样的配置,web容器会自动加载applicationcontext.xml初始化:
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class></listener><!-- 默认情况下容器会去WEB-INF/applicationContex.xml找不到就会报错 这里重新指定applicationContext.xml的位置 --><context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext.xml</param-value> </context-param>
小结:
至此Spring和Mybatis已经整合完成,也说明
Mybatis-config.xml构建sqlSessionFactory的功能也可以由Spring托管了,所以我们可以删除Mybatis-config.xml里面数据源的配置以及的配置;
值得一提的是此时的数据源是使用了Spring自带的数据源 (org.springframework.jdbc.datasource.DriverManagerDataSource)
,该数据源事实上并没有连接池的作用,即每次有连接都会新建一个connection,会造成资源的浪费和多余的程序开销。
如果要更加灵活的配置我们可以使用连接池:
C3P0(com.mchange.v2.c3p0.ComboPooledDataSource)
DBCP(org.apache.commons.dbcp.BasicDataSource)
===================================================
整合SpringMVC-Spring-Mybatis
pom.xml中引入核心包:
<!-- Spring mvc start --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring mvc end -->
在web.xml中注册Springmvc核心控制器
<!-- 2. Spring mvc configuration start --> <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> <!-- init servlet when context startup--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- Spring mvc configuration end -->
在src/test/java/action/中新建TestUserController.java
package action;import mapper.TestUserMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import bean.TestUser;@Controllerpublic class TestUserController { @Autowired private TestUserMapper testUserMapper; @RequestMapping("test/login.do") // 请求url地址映射,类似Struts的action-mapping public String testLogin(Model model) { // @RequestParam是指请求url地址映射中必须含有的参数(除非属性required=false) // @RequestParam可简写为:@RequestParam("username") TestUser user = testUserMapper.selectByPrimaryKey(1); model.addAttribute("user", user); return "testSuccess"; }}
本例中返回了user信息到/jsp/testSuccess.jsp中,在 src/main/webapp/jsp/中新建testSuccess.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body> user name:<P> ${user.name}</P> <br/> user age<P> ${user.age}</P></body></html>
启动tomcat,访问:http://localhost:8080/categorySystem
访问:http://localhost:8080/categorySystem/test/login.do
至此Mybatis-Spring-Springmvc已经整合完成,如有错误,请指正~
参考资料:
http://www.cnblogs.com/best/p/5638827.html
http://blog.csdn.net/abcd898989/article/details/51316612
相关工具:
http://mvnrepository.com/
- Maven搭建Mybatis-spring-springMVC项目记录
- 使用Maven搭建Spring+SpringMVC+Mybatis项目
- spring + springMVC +mybatis Maven项目搭建
- Spring+SpringMVC+Mybatis+Maven搭建项目
- Spring+SpringMVC+Mybatis+Maven搭建项目
- SSM(Spring+SpringMVC+Mybatis)+Maven项目搭建
- Maven搭建SpringMVC+Spring+Mybatis项目详解
- Spring+SpringMVC+Mybatis搭建Maven项目详解
- maven 项目搭建spring+springMVC+mybatis
- Eclipse+Maven搭建Spring+SpringMVC+Mybatis项目
- 三、maven项目搭建 springmvc+ spring + mybatis(springmvc搭建)
- Maven+MySql(Spring+Mybatis+SpringMVC+Maven+MySql)项目搭建实例
- 搭建maven+Spring+Springmvc+mybatis环境出错记录
- Maven搭建SpringMVC+Mybatis项目时遇到的问题记录
- maven spring springmvc mybatis搭建
- Maven搭建SpringMVC+Mybatis项目
- springMVC+mybatis+maven项目搭建
- 使用Maven搭建Spring+SpringMVC+Mybatis+ehcache项目
- iptables快速设置
- Ubuntu真机下MTK平台FAE自助脚本调试工具,无需驱动工程师协助(shell源码开源)
- antd控件用法
- 裁剪ClippingNode
- BaseRecyclerAdapter之添加不同布局(头部尾部)
- Maven搭建Mybatis-spring-springMVC项目记录
- jsp中分页技术的一些想法
- leetcode 148 sortlist
- python+opencv识别动态物体
- 【密码学】CSP的概念
- JAVA SE — Day 02
- 机器学习常见算法个人总结(面试用)
- 2017 ACM-ICPC西安赛区网络赛 Barty's Computer【哈希】
- 转载:公钥、私钥、USBKey、CSP、数字证书和CryptoAPI的简介