• 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文件如下所示:

    <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>
    View Code

    更新项目后,可以看到新增的Maven依赖Jar包

    MySQL建表并填充数据

    在MySQL中建立ConfigItem对象bean对应的数据表t_g_configitem,并填充对应数据

    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;
    View Code

    数据库访问实现

    要实现数据库访问,肯定少不了数据库连接这一环节。

    在src/main/resources目录下新建一个config.properties文件来保存数据库连接信息

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/scland
    username=root
    password=root
    View Code

    单单有一个数据库连接配置文件可不行,还得配置MyBatis的运行环境,在resources目录下新建一个MyBatisConfig.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="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>
    View Code

    在Util目录下新建一个通用类MyBatisUtil,实现数据库连接并获取活动SqlSession。

    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);
        }
        
    }
    View Code

    修改IConfigItemDao接口,添加getAllConfigItems方法

    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);
    }
    View Code

    修改ConfigItem实体bean对应的映射文件ConfigItemMapper.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="com.lock.base.app.builder.daointerface.IConfigItemDao">
        <select id="getAllConfigItems" resultType="ConfigItem">
            select * from t_g_configitem
        </select>
    </mapper>
    View Code

    在ConfigItemDaoImpl类实现IConfigItemDao接口的getAllConfigItems方法

    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;
        }
    
    }
    View Code

    上述步骤完成后,就可以编写测试代码进行测试验证了

    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);
        }
        
    }
    View Code

    执行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

  • 相关阅读:
    CF1080D Olya and magical square
    CF1062D Fun with Integers
    leetcode378 Kth Smallest Element in a Sorted Matrix
    hdoj薛猫猫杯程序设计网络赛1003 球球大作战
    hihocoder1068 RMQ-ST算法
    hihocoder1032 最长回文子串
    hihocoder1394 网络流四·最小路径覆盖
    hihocoder1398 网络流五·最大权闭合子图
    【bzoj4562】HAOI2016食物链
    【bzoj1026】windy数
  • 原文地址:https://www.cnblogs.com/hans_gis/p/5766050.html
Copyright © 2020-2023  润新知