Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问
本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问。
添加依赖Jar包
这部分内容需要以下Jar包支持
mysql-connector:MySQL数据库连接驱动,架起服务端与数据库沟通的桥梁;
MyBatis:一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架;
log4j:Apache的开源项目,一个功能强大的日志组件,提供方便的日志记录;
修改后的pom.xml文件如下所示:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lock</groupId> <artifactId>LockMIS</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>LockMIS Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <org.springframework.version>4.0.7.RELEASE</org.springframework.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.2.4</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.6.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.31</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.7</version> </dependency> </dependencies> <build> <finalName>LockMIS</finalName> </build> </project>
更新项目后,可以看到新增的Maven依赖Jar包
MySQL建表并填充数据
在MySQL中建立ConfigItem对象bean对应的数据表t_g_configitem,并填充对应数据
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
CREATE TABLE `t_g_configitem` ( `ConfigItemID` int(11) NOT NULL, `IDCode` varchar(40) NOT NULL, `Label` varchar(40) DEFAULT NULL, `ItemValue` varchar(500) DEFAULT NULL, `Note` varchar(1000) DEFAULT NULL, `DataTypeID` int(11) DEFAULT NULL, PRIMARY KEY (`ConfigItemID`) ) ENGINE=InnoDB DEFAULT CHARSET=gbk;
数据库访问实现
要实现数据库访问,肯定少不了数据库连接这一环节。
在src/main/resources目录下新建一个config.properties文件来保存数据库连接信息
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/scland
username=root
password=root
单单有一个数据库连接配置文件可不行,还得配置MyBatis的运行环境,在resources目录下新建一个MyBatisConfig.xml文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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="config.properties"></properties> <!--类型别名,默认引入com.lock.base.app.builder.bean下的所有类 --> <typeAliases> <package name="com.lock.base.app.builder.bean"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <!--引入映射文件 --> <mapper resource="com/lock/base/app/builder/daomapper/ConfigItemMapper.xml" /> </mappers> </configuration>
在Util目录下新建一个通用类MyBatisUtil,实现数据库连接并获取活动SqlSession。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.lock.base.Util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public abstract class MyBatisUtil { private static SqlSessionFactory factory=null; public static SqlSessionFactory getSqlSessionFactory(){ if(factory==null){ // 获得环境配置文件流 InputStream config = MyBatisUtil.class.getClassLoader().getResourceAsStream("MyBatisConfig.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); } }
修改IConfigItemDao接口,添加getAllConfigItems方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.lock.base.app.builder.daointerface; import java.util.List; import com.lock.base.app.builder.bean.ConfigItem; public interface IConfigItemDao { public List<ConfigItem> getAllConfigItems(); public Boolean updateConfigItem(ConfigItem configItem); }
修改ConfigItem实体bean对应的映射文件ConfigItemMapper.xml
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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="com.lock.base.app.builder.daointerface.IConfigItemDao"> <select id="getAllConfigItems" resultType="ConfigItem"> select * from t_g_configitem </select> </mapper>
在ConfigItemDaoImpl类实现IConfigItemDao接口的getAllConfigItems方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.lock.base.app.builder.daoimpl; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.springframework.stereotype.Component; import org.springframework.stereotype.Repository; import com.lock.base.Util.MyBatisUtil; import com.lock.base.app.builder.bean.ConfigItem; import com.lock.base.app.builder.daointerface.IConfigItemDao; @Repository public class ConfigItemDaoImpl implements IConfigItemDao { @Override public List<ConfigItem> getAllConfigItems() { //获得会话对象 SqlSession session=MyBatisUtil.getSession(); try { //通过MyBatis实现接口BookTypeDAO,返回实例 IConfigItemDao configItemDao = session.getMapper(IConfigItemDao.class); return configItemDao.getAllConfigItems(); } finally { session.close(); } } @Override public Boolean updateConfigItem(ConfigItem configItem) { // TODO Auto-generated method stub return null; } }
上述步骤完成后,就可以编写测试代码进行测试验证了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.lock; import static org.junit.Assert.*; import java.util.List; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.lock.base.app.builder.bean.ConfigItem; import com.lock.base.app.builder.daoimpl.ConfigItemDaoImpl; import com.lock.base.app.builder.daointerface.IConfigItemDao; import com.lock.base.app.builder.service.ConfigItemService; import com.lock.base.config.AppConfig; public class BaseTest { static IConfigItemDao configItemDao; @BeforeClass public static void beforeClass() { configItemDao = new ConfigItemDaoImpl(); } @Test public void test4() { List<ConfigItem> configItems = configItemDao.getAllConfigItems(); for (ConfigItem configItem : configItems) { System.out.println(configItem.getIdcode()); } assertNotNull(configItems); } }
执行Maven编译,确认无误后,运行测试
对比建表数据,测试代码的运行结果无误。
小结
本文在Java Web学习系列——Maven Web项目中集成使用Spring基础上,添加了MySQL,MyBatis等依赖Jar包,基于此实现了连接MySQL数据库,并顺利读取数据库中的表数据。
参考:
https://www.cnblogs.com/iflytek/p/7096481.html
https://www.cnblogs.com/xdp-gacl/p/4271627.html
https://blog.csdn.net/zhshulin/article/details/37956105
https://blog.csdn.net/zhshulin/article/details/23912615
https://blog.csdn.net/lutianfeiml/article/details/51864160
出处:http://www.cnblogs.com/hans_gis/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。