zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    file is universal (3 slices) but does not contain a(n) armv7s slice error for static libraries on iOS
    WebImageButton does not change images after being enabled in Javascript
    ajax OPTION
    编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
    获取海洋天气预报
    C#线程系列教程(1):BeginInvoke和EndInvoke方法
    js控制只能输入数字和小数点
    Response.AddHeader(,)
    ManualResetEvent的理解
    Convert.ToInt32、int.Parse(Int32.Parse)、int.TryParse、(int) 区别
  • 原文地址:https://www.cnblogs.com/hans_gis/p/5766050.html
Copyright © 2011-2022 走看看