实训第六天(mybatis)
今天实训第六天,我们学习了mybatis这个数据库框架,虽然说框架的环境搭建非常的繁琐,但是在了解原理和流程之后是非常的舒服的。因为有一个强大的工具被我掌握了,所以今天感觉非常的开心。
首先我们是在springmvc上面搭建的mybatis框架的。所以地基一定要搭建起来。就是在pom.xml写依赖。然后在spring(applicationcontent.xml)容器里面写一个mapper的扫描器,然后在mvc里面写一个controller的扫描器。
然后就是那写mybatis的配置文件,这个配置文件大概分为两个步骤,第一写一个关于sql语句的内容,第二就是写映射内容(spring全局配置mapper映射)
接下来就是详细步骤
1.基于maven的springmvc的框架要搭建起来。
2.通过maven非常爽的依赖管理功能来下载mybatis的依赖。
<!-- 依赖软件包版本 -->
<properties>
<commons-lang.version>2.6</commons-lang.version>
<spring.version>4.1.3.RELEASE</spring.version>
<slf4j.version>1.7.6</slf4j.version>
</properties>
<!-- 配置依赖管理包 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <!-- 项目依赖包 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons-lang.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency> <dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency> <!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency> --> <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- ContentNegotiatingViewResolver依赖包 --> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.4</version>
</dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.4</version>
</dependency>
<!-- spring jdbc支持包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<!-- 配置spring 事务管理包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mysql连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency> <!-- 数据源 c3p0 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-dao</artifactId>
<version>2.0.3</version>
</dependency> <!-- mybatis所需包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency> <!-- jstl标签包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins> <plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8888</port>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin> </plugins>
</build>
plugin的内容非常重要,可以解决一些bug。见一下上,到时候maven 的tomcat7:run可以运行项目,非常的爽(没写的时候很痛苦)
然后就是spring容器的配置
<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl"
value="jdbc:mysql:///test?characterEncoding=utf-8"/>
<property name="user" value="root" />
<property name="password" value="123zsj" />
</bean> <!-- mybatis的SqlSession的工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean> <!-- mapper扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="mapper的路径"></property> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean> <!-- 创建userLoginService -->
<bean id="userLoginService" class="com.farsight.service.impl.UserLoginServiceImpl"></bean> <!-- 事务管理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" ></tx:annotation-driven> <!-- 开启注解 -->
<context:annotation-config/>
</beans>
注意,数据源的备注哪里需要做相应的更改,不然找不到对应的数据库。
还有mapper的扫描器那里也必须写好路径,不然到时候mapper写了就跟没写一样
还有你自己想注册进spring容器里面的一些类和对象,就比如文中下面的这一句
<bean id="userLoginService" class="com.farsight.service.impl.UserLoginServiceImpl"></bean> 第三步,controller的创建
写一个了之后千万不要忘记
千万不要忘记
千万不要忘记
把这个controller也就是注册器写进我们的mvc容器里面,注意,不是spring容器,是mvc容器 接下来就是我们的开发流程,大体流程是用户发送数据给了controller,然后congtroller又将数据放入service里面
然后service又将数据发给mapper,最后通过mapper的映射关系,就激发了我们的mybatis框架,然后就成功的操作了数据库。
细节如下
写入controller
然后在里面把那个service的接口给导进来,这个实际作用就是把接口的实现类的方法直接调用,
因为我们之前在spring里面注册了接口的实现类,所以在这里我们调用接口的方法也就是调用了实现类的方法。
当我们调用实现类的方法的时候,我们具体的实现类怎么写呢
实现类里具体实现过程就是:将mapper装载进我们的类里,然后直接调用接口的方法,然后实现具体的MySQL语句
然后就成功了。
一开始还不知道这个是怎么实现的。逻辑不过来,后来思考了一下,我的理解如下
我们的service的实现类里面调用装载过来的usermapper接口,然后在大神底层的封装下,我们的mybatis框架直接将usermapper
的抽象方法通过在外面的mapper映射文件里面实现去运行。 一般方法如下,我们先来写一个框架的全局配置文件。这个配置文件里面可以写bean的别名(好处就是可以通过别名,将这个别名传递给下一个xml文件),比如下面这个
<typeAliases>
<typeAlias alias="User" type="com.farsight.pojo.User" />
</typeAliases>
<mappers>
<mapper resource="userMapper.xml" /> <!-- 映射文件 -->
</mappers>
就在这下一个mapper文件xml
写传入数据库的数据库具体的数据和处理的mysql。比如
<mapper namespace="com.farsight.dao.mapper.UserMapper">
<select id="getLoginUser" parameterType="User" resultType="User">
select * from user2 where username = #{username} and password = #{password}
</select>
<insert id="registerUser" parameterType="User">
insert into user2 (username,password) values (#{username},#{password})
</insert>
</mapper>
实训第六天(mybatis)的更多相关文章
- <实训|第六天>偷偷让新手的Linux无限重启附linux主机名称不是随便乱改的!
先说个事情:这几天我正在忙一个项目的设计,8月1号之前要弄出来,所以每天都要弄到很晚,可能更新就有点跟不上了,不过我如果有时间的话,我就更新,没时间的话,我会在8月1号之后统一更新出来,希望大家谅解! ...
- Java企业实训 - 01 - Java前奏
前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...
- UML基础与Rose建模实训教程
目 录 第1章 初识UML. 1 1.1 初识UML用例图... 1 1.2 初识UML类图... 3 第2章 Rational Rose工具... 6 2.1 安装与配置Rational Ro ...
- <实训|第五天>通过搭建NFS,FTP实现共享文件附Vim脚本游戏
先说个事情:我周末是不更新这个系列教程的,不过其他内容的会更新,我周末就整理这一周的各种内容到我的微信公众号中,提供给大家! 期待已久的linux运维.oracle"培训班"终于开 ...
- 软件工程实训项目案例--Android移动应用开发
实训过程 角色分工 1.项目经理:负责项目的组织实施,制定项目计划,并进行跟踪管理 2.开发人员:对项目经理及项目负责 3.需求分析员:负责系统的需求获取和分析,并协助设计人员进行系统设计 4.系统设 ...
- <实训|第四天>Linux下的vim你真的掌握了吗?附上ftp远程命令上传。
期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...
- <实训|第三天>Linux登录界面的修改以及Richard Stallman、自由软件运动
在写博客之前我想说两点: 承认一个错误,昨天写的实训第二天,我把redhat6.7写成了Linux6.7,感谢热心人士的指出! 昨天写的文章名字太长了,今天改善,内容感觉表述不全,希望各位谅解! 官方 ...
- <实训|第二天>掌握linux6.7中安装vmware、vmware安装linux发行版本以及遇到的问题最后libreoffice的安装
期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...
- BeagleBone Black项目实训手册(大学霸内部资料)
BeagleBone Black项目实训手册(大学霸内部资料) 介绍:本教程是<BeagleBone Black快速入门教程>的后续教程.本教程以项目操作为主,讲解LED项目.声音项目.传 ...
随机推荐
- leetcode -- 最长回文子串
题目: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: ...
- 为什么HashMap的加载因子是0.75?
说在前面 在HashMap中,默认创建的数组长度是16,也就是哈希桶个数为16,当添加key-value的时候,会先计算出他们的哈希值(h = hash),然后用return h & (l ...
- 【Feign】@FeignClient相同名字错误 The bean 'xxx.FeignClientSpecification', defined in null, could not be registered
The bean 'xxx.FeignClientSpecification', defined in null, could not be registered. A bean with that ...
- 【Java SE】使用Javacv截取视频图片
[Java Web开发学习]使用Javacv截取视频图片 转载:https://www.cnblogs.com/yangchongxing/p/9482935.html github地址:https: ...
- 有一部分程序员还不知道Java 中的注解到底是如何工作的?
作者:人晓 自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解. 这篇文章中, ...
- Enumeration接口和Iterator接口的区别有哪些?
Enumeration速度是Iterator的2倍,同时占用更少的内存.但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象.同时, ...
- OSU!
OSU! 首先,由题可知,本题是个期望题,根据期望的套路,定义f[x]为x前的答案,所以最终答案就是f[n] f[x]表示前x期望答案,即每一段的长度立方和的期望(一定要清楚) 但是三次方不好算,由于 ...
- 一个简单的示例在spring boot中实现国际化
最近在网上找了一个有关账单管理的spring boot项目,其中有一部分是涉及显示国际化信息的,即将页面上的中英文进行转换.因为在这之前这部分内容没有接触过,所以在这记录下过程. 中文效果图如下所示: ...
- Python复习第01天---元类底层原理
1.通过元类限制类的名字首字母大写 if not class_name.istitle(): raise TypeError('类的名字首字母需要大写') 2. 控制类中必须要有注释 if not c ...
- Python批量更新模块的方法【面试必学】
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:ranchlin 小编的环境为win10+python 3. ...