springboot第一个项目【mybatis】

时间:2022-09-01 16:38:40

1.resources下添加spring

  • 添加spring-context.xml,设置controller的路径,以及引入数据库配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
">
<!-- 自动扫描com.zll.springboot.demo包,包中用了@controller注解的类是控制器 -->
<context:component-scan base-package="com.zll.springboot.demo" />
<!--引入数据库配置文件-->
<import resource="spring-db.xml"/>
</beans>
  • 在resources/application.properties中配置数据库连接,这里写部署相关的配置,包括数据库连接,还有一些其它配置
 #数据库连接:地址、用户名、密码
#数据库地址后加上一些编码格式,使得不出现乱码
spring.datasource.url=jdbc:mysql://url:port/database_name?useUnicode=true&characterEncoding=utf8&useOldAliasMetadataBehavior=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
spring.datasource.username=user_name
spring.datasource.password=user_password
#driver
spring.datasource.driverClassName=com.mysql.jdbc.Driver
#映射文件所在地址,表示resources/mapper/*.xml
mybatis.mapperLocations=classpath:mapper/*.xml
server.port=8011
server.session.timeout=10
server.tomcat.uri-encoding=UTF-8
  • 添加spring-db.xml文件,从application.properties中读取数据来加载数据库
 <?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:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <!-- 加载配置JDBC文件 -->
<context:property-placeholder location="classpath:application.properties" />
<!-- 数据源 ${jdbc.url}这个要和上面application.properties中的一样 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${jdbc.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean> <!-- 开启注解配置 即Autowried -->
<!-- <context:annotation-config/> -->
<!--其实component-scan 就有了annotation-config的功能即把需要的类注册到了spring容器中 -->
<context:component-scan base-package="cn.zll.springboottest.dao" /> <!-- 在使用mybatis时 spring使用sqlsessionFactoryBean 来管理mybatis的sqlsessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- mybatis配置文件路径 -->
<property name="configLocation" value="" />
<!-- 实体类映射文件路径,这里只有一个就写死了,多个可以使用mybatis/*.xml来替代 -->
<property name="mapperLocations" value="classpath:mapper/*.xml" />
</bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0">
<ref bean="sqlSessionFactory" />
</constructor-arg>
</bean> <!--动态代理实现 不用写dao的实现 -->
<bean id="MapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 这里的basePackage 指定了dao层接口路劲,这里的dao接口不用自己实现 -->
<property name="basePackage" value="com.wacai.qa.springboot.demo" />
<!-- 如果只有一个数据源的话可以不用指定,但是如果有多个数据源的话必须要指定 -->
<!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> -->
<!--直接制定了sqlsessionTemplate名称,这个和上面的其实是一样的 -->
<property name="sqlSessionTemplateBeanName" value="sqlSession" />
</bean> <!--事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 使用全注释事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
  • 需要在pom.xml上添加jdbc和mybatis的配置
 <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
  • classpath包含了几个路径:src/main/java/; /src/main/resources/
  • 需要在pom.xml中添加mysql配置,没有加的话com.mysql.jdbc.Driver会找不到
 <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.4</version>
</dependency>

2.开始写sql啦

  • 在resource下添加mapper,然后在mapper下添加UserMapper.xml,在这里写sql语句
 <?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">
<!--命名空间dao-->
<mapper namespace="com.springboot.demo.dao.UserDao">
<!--sql结果与entity的映射-->
<resultMap id="userResult" type="com.springboot.demo.entity.User">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="nick_name" property="nickName" jdbcType="VARCHAR"/>
<result column="email" property="email" jdbcType="VARCHAR"/>
<result column="phone_number" property="phoneNumber" jdbcType="VARCHAR"/>
</resultMap>
<!--数据库基本字段-->
<sql id="Base_Column_List">
id, nick_name, email, phone_number
</sql>
<!--写sql语句,不同的方法用不同标签,如insert/select/delete等-->
<insert id="insert">
INSERT INTO user (nick_name, email, phone_number) VALUES ( #{nickName},#{email}, #{phoneNumber})
</insert>
<!--select会返回结果-->
<select id="query" resultMap="userResult">
SELECT
<include refid="Base_Column_List"/>
from user where id=#{id}
</select>
</mapper>

3.反向工程,从数据库来创建dao和entity对象

参考[利用mybatis-generator自动生成代码]

  • 在pom.xml中添加mybatis-generator-maven-plugin插件配置
 <plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
  • 在resources下添加generatorConfig.xml文件,配置数据库连接,生成类的位置等
 <?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>
<!--mysql 连接数据库jar 这里选择自己本地位置,可以在external Libraries中查找位置和版本-->
<classPathEntry location="/Users/zll/.m2/repository/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar" />
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://url:port/databasename" userId="user_name"
password="user_password">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver> <!--下面是几个要生成的文件的位置配置-->
<!--生成entity,位置targetProject/targetPackage -->
<javaModelGenerator targetPackage="com.zll.springboot.demo.entity" targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置。如果maven工程只是单独的一个工程,targetProject="src/main/java"。若果maven工程是分模块的工程,targetProject="所属模块的名称",例如:targetProject="ecps-manager-mapper",下同-->
<sqlMapGenerator targetPackage="com.zll.springboot.demo.persistence"
targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.zll.springboot.demo.persistence" targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 这里写要转换的表名,比如下面写了baidu_region,那就会将这个表转换过来-->
<table schema="" tableName="baidu_region"></table>
</context>
</generatorConfiguration>
  • 执行反向工程,让它开始配置
    • maven Projects——plugins——mybatis generator
    • 生成的文件:dao下有XXXMapper, entity下有XXX和XXXExample,resources/mapper下有XXXMapper.xml
    • 在XXXMapper.xml中操作数据时,需要用到#{变量名},这个变量名是与entity中的对应,不是数据库字段名