springMVC连接数据库

  • 引入依赖
  • 配置spring-config.xml
  • 查询数据



本文记录spring-boot连接数据库的依赖及配置,

其中${}引用的内容表示根据自身情况改变的值

引入依赖

1. mysql驱动

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.24</version>
</dependency>

2. c3p0连接池

<dependency>
	<groupId>com.mchange</groupId>
	<artifactId>c3p0</artifactId>
	<version>0.9.5.1</version>
</dependency>

3. mybatis

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.1.1</version>
</dependency>

4. mybatis-plus

<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus</artifactId>
	<version>3.0.3</version>
</dependency>

5. mybatis-plus-core

<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-core</artifactId>
	<version>3.0.3</version>
</dependency>

配置spring-config.xml

1. 数据库连接池

<bean id="mysqlDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destory-method="close">
</bean>
  • c3p0-config.xml配置文件
<c3p0-config>
	<default-config>
 		<property name="user">admin</property>
 		<property name="password">123456</property>
 		<property name="driverClass">com.mysql.jdbc.Driver</property>
 		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/${dbName}?useUnicode=true&characterEncoding=utf-8</property>
 		<property name="initialPoolSize">3</property>
 		<property name="maxIdleTime">30</property>
 		<property name="maxPoolSize">600</property>
 		<property name="minPoolSize">3</property>
 		<property name="maxStatementsPerConnection">10</property>
	</default-config>
</c3p0-config>

2. mapper扫描配置

<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="${mapper接口所在文件夹的路径}"></property> //在下面例子中值为:com.test.db.mapper
	<property name="sqlSessionFactoryBeanName" value="mySqlSessionFactory"></property>
</bean>

3. MySql会话工厂

<bean id="mySqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactotyBean">
	<property name="dataSource" value="mysqlDataSource"></property>
	<property name="configLocation" value="classpath:${mybatis配置文件的路径}"></property> //在下面例子中值为:config/mybatis-config.xml
	<property name="mappersLocations" value="classpath:${sql语句xml文件路径}"></property> //在下面例子中值为:mybatisMapper/*.xml
	<property name="typeAliasesPackage" value="${模型类所在文件夹的路径}"></property> //在下面例子中值为:com.test.db.model
</bean>
  • mybatis配置文件,路径:resources文件夹下,config/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>
    <!-- 属性配置 -->
    <!-- 优先级:方法参数传递 > resource/url 属性中指定的配置文件 > 属性中指定的属性property -->
    <properties resource="conf/database.properties">
        <property name="jdbc.username" value="zou" />
        <property name="jdbc.password" value="******" />
    </properties>

    <!-- 调整设置,它们会改变 MyBatis 的运行时行为 -->
    <settings>
        <!-- 全局的映射器开启或禁用缓存 (默认true) -->
        <setting name="cacheEnabled" value="true" />
        <!-- 全局开启或管理延迟加载。当开启时,所有关联对象都会延迟加载 (默认false) -->
        <setting name="lazyLoadingEnabled" value="true" />
        <!-- 当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载 (默认false) -->
        <setting name="aggressiveLazyLoading" value="true"/>
        <!-- 允许单一sql语句返回多结果集 (默认true) -->
        <setting name="multipleResultSetsEnabled" value="true" />
        <!-- 使用列标签代替列名 (默认true) -->
        <setting name="useColumnLabel" value="true" />
        <!-- 允许 JDBC 支持自动生成主键 (默认false)  -->
        <setting name="useGeneratedKeys" value="false" />
        <!-- 指定 MyBatis 应如何自动映射列到字段或属性,NONE:不隐射 PARTIAL:部分  FULL:全部  (默认PARTIAL)  -->
        <setting name="autoMappingBehavior" value="PARTIAL" />
        <!-- 配置默认的执行器, SIMPLE:普通; REUSE: 执行器会重用预处理语句(prepared statements); BATCH:执行器将重用语句并执行批量更新。-->
        <setting name="defaultExecutorType" value="SIMPLE" />
        <!-- 超时时间 -->
        <setting name="defaultStatementTimeout" value="25" />
        <!-- 为驱动的结果集获取数量(fetchSize)设置一个提示值 -->
        <setting name="defaultFetchSize" value="100" />
        <!-- 允许在嵌套语句中使用分页,如果允许使用则设置为false (默认false) -->
        <setting name="safeRowBoundsEnabled" value="false" />
        <!-- 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。(默认false) -->
        <setting name="mapUnderscoreToCamelCase" value="false" />
        <!-- 设置本地缓存范围 session:就会有数据的共享  statement:语句范围 (这样就不会有数据的共享 ) defalut:session -->
        <setting name="localCacheScope" value="SESSION" />
        <!-- 设置但JDBC类型为空时,某些驱动程序 要指定值,default:OTHER,插入空值时不需要指定类型 -->
        <setting name="jdbcTypeForNull" value="OTHER" />
        <!-- 指定哪个对象的方法触发一次延迟加载 -->
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
    </settings>

    <!-- 类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余 -->
    <typeAliases>
        <typeAlias alias="Author" type="domain.blog.Author" />
        <typeAlias alias="Section" type="domain.blog.Section" />
        <typeAlias alias="Tag" type="domain.blog.Tag" />
        <!-- 也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean -->
        <!-- 会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author -->
        <package name="domain.blog"/>
    </typeAliases>
    
    <!-- 类型处理器 -->
    <typeHandlers>
        <typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
    </typeHandlers>
    
    <!-- 插件 -->
    <plugins>
      <plugin interceptor="org.mybatis.example.ExamplePlugin">
        <property name="someProperty" value="100"/>
      </plugin>
    </plugins>

    <!-- 环境配置:事务管理器和数据源配置 -->
    <!-- 尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一 -->
    <environments default="development">
        <environment id="development">
            <!-- JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置 -->
            <transactionManager type="JDBC" />
            <!-- POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>

    <!-- 插件 -->
    <plugins>
        <plugin interceptor="org.mybatis.example.ExamplePlugin">
            <property name="someProperty" value="100" />
        </plugin>
    </plugins>

    <!-- 映射器 -->
    <mappers>
        <!-- 使用相对于类路径的资源引用 -->
        <mapper resource="com/brave/dao/mapper/UpmsUserMapper.xml" />
        <!-- 使用完全限定资源定位符(URL) -->
        <mapper url="file:///var/mappers/PostMapper.xml"/>
        <!-- 使用映射器接口实现类的完全限定类名 -->
        <mapper class="org.mybatis.builder.PostMapper"/>
        <!-- 将包内的映射器接口实现全部注册为映射器 -->
        <package name="org.mybatis.builder"/>
    </mappers>
</configuration>

查询数据

1. MySql模型类

package com.test.db.model;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;

@TableName("t_user")
@Getter @Setter
public class UserMO {
	private Integer id;
	private String name;
}

2. Mapper接口

  • Mapper接口要继承BaseMapper接口
package com.test.db.mapper;

import com.test.db.model.UserMO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<UserMO> {
	UserMO selectUserById(Integer id);
}

3. mybatis-mapper文件

  • 文件路径:resources文件夹下,mybatisMapper/UserMapper.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.test.db.mapper.UserMapper">
	<select id="selectUserById" resultType="com.test.db.model.UserMO">
		select * from t_user;
	</select>
</mapper>

4. 调用mapper接口查询数据

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:spring-config.xml")
public class TestMain {
	
	@Autowired
	UserMapper userMapper;

	@Test
	public void doTest() {
		UserMO user = userMapper.selectUserById(1);
	}
}