首先回顾一下MyBatis封装简化Dao层连接数据库操作的顺序.

首先MyBatis是一个引入的jar包,还有一些依赖包,可能用不到的jar包,一并引入就好了,再多引入一个Juntil.jar测试包(省略把jar包添加到可用仓库操作)

其后在项目的分层结构中使用MyBatis.

首先代码分包分层结构. (我建立的是Dynamic Web Project,而分层存在于src中)

上图中有些可能不全,有些可能不再使用,视情况而定.视命名而定.

之后的构想是实现一个简单的查询,从网站的某个新闻或者文档模块去模糊查询出包含查询语句的篇章.

因为之前的网站使用的只是静态网页,也没有区分出什么模块是新闻板块,文本板块.并将文本存到数据库中.(一些后台设置新闻版块都是将文本保存到数据库)

后来参考博文 https://blog.csdn.net/hzp666/article/details/77414618 可以采用爬取网站内容的网络爬虫方式.(即将给定的URL连接中文本获取并进行相应操作)

(方法很奇特,功能也有点,但是F12好像能完全做了,并且要再实现输入网页下载相关文件到文件包,得需要js文件的爬取,这里不再做深入)

言归正传

首先创建项目,并在项目文件包lib中引入所有mybatis.jar包和依赖包,以及junit.jar包用于测试.

其后在src中引入log4j.properties.   日志文件有很多种写法,这里为精简最好.

其后将mybatis.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="com/ykmimi/config/jdbc.mysql.properties">
</properties>
<typeAliases>
<typeAlias alias="Student" type="com.ykmimi.entity.Student"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ykmimi/dao/mapper.xml" />
<mapper resource="com/ykmimi/dao/mapper2.xml" />
</mappers>
</configuration>

首先.在mybatis.xml这个 config 文件中 configuration 是它外层根标签,  properties 指定了jdbc驱动及密码等一揽子文本配置内容.并使用了 ${jdbc.driver} 这种方式引入使用.

environments 中包含 environment , (环境), 并至少包含一个. environments 参数default指定了默认环境是哪一个子内容环境的id.

transactionManager 是JDBC事务管理器, dataSource是数据源 类型为连接池,

<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->

<!-- POOLED 表示支持JDBC数据源连接池 -->

<!-- UNPOOLED 表示不支持数据源连接池 -->

<!-- JNDI 表示支持外部数据源连接池 -->

下面的<mappers>标签中是注册的映射文件(内含SQL语句).

------

建立测试用的 Student 实体类

package com.ykmimi.entity;

public class Student {

    //成员变量
private Integer id;
private String name;
private int age;
private double score; //alt+shift+s c
public Student() {
} //alt+shift+s o
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
} //alt+shift+s r 属性是get或set去掉get后首字母小写
public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public double getScore() {
return score;
} public void setScore(double score) {
this.score = score;
} //alt+shift+s s
@Override
public String toString() {
return id+","+name+","+age+","+score;
} }

并建立数据库schoolsystem,建立表 students

CREATE TABLE `students` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int(3) DEFAULT NULL,
`score` double DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

(数据库中文乱码问题,在建立数据库时选定字符编码为utf-8 Unicode)不然也可以设置url为

"jdbc:mysql://localhost:3306/数据库名?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false"

首先在原来的dao包中建立一个测试用的 IStudentDao 接口, I表示接口,之后的命名可以参照.

其后是 StudentDaoImpl 接口实现.

package com.ykmimi.dao;

import com.ykmimi.entity.Student;

public interface IStudentDao {
void insertStu(Student student);
}
package com.ykmimi.dao;

import java.io.IOException;
import java.io.InputStream; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.ykmimi.entity.Student; public class StudentDaoImpl implements IStudentDao { private SqlSession sqlSession; @Override
public void insertStu(Student student) {
try {
//1.加载主配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
//2.创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
sqlSession = sqlSessionFactory.openSession();
//4.相关操作
sqlSession.insert("test.insertStudent", student);
sqlSession.commit();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(sqlSession!=null) {
sqlSession.close();
}
}
} }

之后创建mapper文件来实现sql语句的mybatis封装使用

前几个文摘说到mybatis是半ORM的,也就是还需要手写一部分的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"> <!-- dtd约束xml -->
<mapper namespace="stu">
<insert id="insertStudent" parameterType="Student">
insert into students(name,age,score) values(#{name},#{age},#{score})
</insert>
</mapper>

mapper的namespace指定了使用这个命名空间下的增删改查方法. (利于区分)

insert或select等的id就相当于原先dao层方法名, parameterType是参数类型. 而resultType是返回类型.

下面的mapper2.xml文件只是为了区分测试namespace的作用.

<?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"> <!-- dtd约束xml -->
<mapper namespace="test">
<insert id="insertStudent" parameterType="Student">
insert into students(name,age,score) values(#{name},#{age},#{score})
</insert>
</mapper>

从打印日志信息可以看出是执行的哪一个命名空间的insert方法.

2018-08-10 23:41:19,936 [main] DEBUG [stu.insertStudent] - ==>  Preparing: insert into students(name,age,score) values(?,?,?)
2018-08-10 23:41:19,970 [main] DEBUG [stu.insertStudent] - ==> Parameters: 张生(String), 23(Integer), 93.5(Double)
2018-08-10 23:41:19,971 [main] DEBUG [stu.insertStudent] - <== Updates:

简单使用的mybatis测试文件在这里,下一章节将获取SqlSession的方法单独拿出来作为一个类似于getConnection的方法.

 
 
 

MyBatis使用小案例的更多相关文章

  1. 模拟用户登录-SpringMVC+Spring+Mybatis整合小案例

    1. 导入相关jar包 ant-1.9.6.jarant-launcher-1.9.6.jaraopalliance.jarasm-5.1.jarasm-5.2.jaraspectj-weaver.j ...

  2. MyBatis小案例完善增强

    https://blog.csdn.net/techbirds_bao/article/details/9233599 上链接为一个不错的Mybatis进阶博客 当你把握时间,时间与你为伍. 将上一个 ...

  3. Mybatis案例升级版——小案例大道理

    纯Mybatis案例升级版——小案例大道理 前言: 这几天看了一本书<原则>,在上面看到了一句话叫“每个人都把自己眼界的局限当成世界的局限”,大学生是

  4. 一个ssm综合小案例-商品订单管理----写在前面

    学习了这么久,一直都是零零散散的,没有把知识串联起来综合运用一番 比如拦截器,全局异常处理,json 交互,RESTful 等,这些常见技术必须要掌握 接下来呢,我就打算通过这么一个综合案例把这段时间 ...

  5. Hibernate的介绍及入门小案例

    1.Hibernate的诞生 在以前使用传统的JDBC开发应用系统时,如果是小型应用系统,并不觉得有什么麻烦,但是对于大型应用系统的开发,使用JDBC就会显得力不从心,例如对几十,几百张包含几十个字段 ...

  6. 机械表小案例之transform的应用

    这个小案例主要是对transform的应用. 时钟的3个表针分别是3个png图片,通过setInterval来让图片转动.时,分,秒的转动角度分别是30,6,6度. 首先,通过new Date函数获取 ...

  7. shell讲解-小案例

    shell讲解-小案例 一.文件拷贝输出检查 下面测试文件拷贝是否正常,如果cp命令并没有拷贝文件myfile到myfile.bak,则打印错误信息.注意错误信息中basename $0打印脚本名.如 ...

  8. [jQuery学习系列六]6-jQuery实际操作小案例

    前言最后在这里po上jQuery的几个小案例. Jquery例子1_占位符使用需求: 点击第一个按钮后 自动去check 后面是否有按钮没有选中, 如有则提示错误消息. <html> &l ...

  9. 02SpringMvc_springmvc快速入门小案例(XML版本)

    这篇文章中,我们要写一个入门案例,去整体了解整个SpringMVC. 先给出整个项目的结构图:

随机推荐

  1. WEB安全番外第一篇--其他所谓的“非主流”漏洞:URL跳转漏洞与参数污染

    一.URL跳转篇: 1.原理:先来看这段代码: <?php if(isset($_GET["url_redircetion_target"])){ $url_redirect ...

  2. sort排序和uniq统计命令

    author:headsen chen date: 2018-08-13  11:08:09 1,sort:排序的功能,默认安装ASCII码来排序,-n 安装数值排,-r 按照倒序来排 [root@b ...

  3. 解决:Bitmap too large to be uploaded into a texture exception

    前几天拿锤子手机做测试,启动页面的闪屏直接黑屏.. 所以看下日志,百度一下 找到解决方案,特此记录. 简单说就是硬件加速的时候,对图片的大小有限制.不同设备可能有不同的最大值.这个问题悲催的地方是,程 ...

  4. IIS7的HTTP到HTTPS的重定向

    方法一设置IIS 从HTTP到HTTPS的IIS7中的所有流量重定向,将确保用户始终安全地访问该网站.有许多不同的方法来设置一个IIS7从HTTP重定向到HTTPS和一些比别人更好.理想的HTTP到H ...

  5. linux grep命令(linux在文件中搜索内容)

    转自:https://www.cnblogs.com/end/archive/2012/02/21/2360965.html linux grep命令 1.作用Linux系统中grep命令是一种强大的 ...

  6. 使用_Capistrano_进行自动化部署(2)

    之前的一篇文章是为了解决问题而写的,很多东西都没有介绍清楚,这一篇文章就是完整介绍一下 Capistrano,主要的参考来源是 Modern PHP 这本书. Capistrano 是用于自动部署应用 ...

  7. 修改bootstrap 的全局样式,bootstrap 3.0 是由html5和CSS 3组成的

    方法一: 不建议使用 * {}选择器,因为在一些其他样式插件.特殊部分会有更好的字体样式设定,用*就会全部覆盖. 正常引入bootstrap的css样式后,记得将自定义的样式表放到其之后, <l ...

  8. c# 网站 vislual studio

    一.新建 1.新建网站 在 菜单栏-->新建-->项目-->选项编辑语言-->web-->先前版本-> 2.新建母板: *.master文件是母板页文件.添加新项时 ...

  9. Hibernate的状态,缓存和映射

    Hibernate的状态,缓存和映射 1.对象的状态 1.1.对象状态的概念和分类 在使用Hibernate操作数据库的时候,我们先创建了JavaBean对象,然后使用session来保存或者更新到数 ...

  10. appfog 添加数据库支持

    1.PhpMyAdmin与app 在同一应用 1.cd进入应用所在的文件夹,输入 git clone git://github.com/appfog/af-php-myadmin.git 2.进入本地 ...