java实训笔记_使用MyBatis进行简单查询
上一篇写了java实训笔记_Spring MVC使用json
因为SpringMVC的内容都比较偏实际应用,所以就没有做总结 ,直接进入MyBatis的使用了。
1 本篇内容
本篇介绍了MyBatis的使用,包含引入、主配置文件的编写、一个简单的查询。
2 引入
引入mybatis和连接数据库所需的包。
<!-- MyBastis --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency>
3 准备工作
使用前先准备pojo包和mapper包,pojo包以后会放实体类,mapper包会放映射的接口和类。
4 主配置文件的编写
项目的主配置文件名为
SqlMapConfig.xml,放在
src/main/resources目录下
4.1 头声明
头声明直接复制即可,后续的声明需要写在
<configuration></configuration>标签中。
<?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> </configuration>
4.2 配置文件 properties标签
4.2.1 作用与写法
properties标签用于引入配置文件,在此用来引入数据库连接的配置信息,写法如下,如何引用配置文件 中的信息见下文环境信息
<!-- 配置文件 --> <properties resource="db.properties"></properties>
4.2.2 db.properties文件
在同目录下新建
db.properties文件,在该文件中写入连接数据库的配置信息
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/ssm name=root password=
4.3 别名 typeAliases标签
别名标签用于自定义别名,可以单列自定义,也可以批量自定义,但都需要定义在
<typeAliases></typeAliases>标签之中,定义别名以后可以通过别名指代pojo类,简化代码。
<typeAliases> </typeAliases>
4.3.1 单列自定义
单列自定义需要使用
<typeAlias type="" alias=""></typeAlias>进行定义,
type指向想要自定义的类,
alias是想要自定义的别名,下面是一个例子。
<typeAlias type="com.test.pojo.user" alias="User"></typeAlias>
4.3.2 批量自定义
批量自定义需要试用
<package name=""></package>进行自定义,
name指向想要自定义的包,会自动为该包下的所有类声明别名,声明的别名就是类名,在后续使用时可以直接使用类名,首字母大小写都可以,这个是比较常用的方式。
<package name="com.test.pojo"/>
4.3.3 最终声明
<typeAliases> <package name="com.test.pojo"/> </typeAliases>
4.4 环境信息 environments标签
environments标签用于配置数据库的连接信息,可以用多个
environment子标签来配置连接不同数据库的连接信息,配置了多个
environment标签的话在创建
sqlSessionFactory时需要指定环境参数,不指定的话会加载默认环境。
在
<environments default=""></environments>中的
default指定默认环境,值是子标签的id属性值
<environments default=""> </environments>
4.4.1 environment 子标签
environment子标签的
id属性指定该
environment的id,创建
SqlSessionFactory时传入该值创建使用对应的环境参数创建连接,它有事务管理器
transactionManager子标签和数据源
dataSource子标签
<environment id=""> <transactionManager type=""> </transactionManager> <dataSource type=""> </dataSource> </environment>
4.4.2 事务管理器 transactionManager
MyBatis中有两种事务管理器,
- JDBC:直接使用JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
- MANAGED:它从不提交或回滚一个连接,而是让容器来管理整个事务的声明周期,默认情况下会关闭连接,可以将closeConnection设置为false来阻止默认关闭行为。
注:使用Spring+MyBatis开发没有必要配置事务管理器,Spring会使用自带的管理器来覆盖配置。
也可以使用
TransactionFactory和
Transaction两个接口来自定义MyBatis的事务处理。
4.4.3 数据源 dataSource
dataSource元素使用标准的JDBC数据源接口来配置JDBC连接对象的资源。
有三种内建的数据源类型
- UNPOOLED:每次请求时打开和关闭连接需要配置driver、url、username和password。
- POOLED:利用“池”的概念将JDBC连接对象组织起来,避免创建新的连接实例所必须的初始化和认证时间,是一种使得并发Web应用快速响应请求的流行处理方式。
- JNDI:为了能在如EJB或应用服务器这类容器中使用,这类容器可以集中或在外部配置数据源,在这里放置一个JNDI上下文的引用它就会去引用中找。
引用配置文件的值创建一个环境信息
<environment id="development"> <!-- 配置JDBC事务控制,由mybatis进行管理 --> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${name}" /> <property name="password" value="${password}" /> </dataSource> </environment>
注:
environments标签必须包含
environment标签,
environment必须包含
transactionManager和
dataSource标签
4.5 映射文件 mapper标签
mapper标签用于找到
*Mapper.xml所在的位置,有多种配置方式,常用的是最下面那种使用package的那种
<mappers> <!-- resource 相对路径 起始地址在src/main/resources --> <!-- <mapper resource="config/mapper/userMapper.xml"/> --> <!-- url 绝对路径 D:/ --> <!-- <mapper url=""/> --> <!-- class 包名全限命名(全类名) com.test.pojo --> <!-- <mapper class=""/> --> <!-- package 注册指定包下的所有映射文件 将xml与java类放一起 该方法要求mapper接口与mapper映射 文件名称一样且在同一目录下 --> <package name="com.test.mapper"/> </mappers>
4.6 最终成品
<?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="db.properties"></properties> <!-- 自定义别名 --> <typeAliases> <!-- 对单个列名的定义 --> <!-- <typeAlias type="edu.zhku.pojo.user" alias="User"></typeAlias> --> <!-- 批量定义列名 --> <!-- package:指定包的名称,为该包下的pojo类声明别名,所有定义的别名就是类名(首字母大小写都可以) --> <package name="com.test.pojo" /> <package name="com.test.vo" /> </typeAliases> <!-- 环境信息 --> <environments default="development"> <environment id="development"> <!-- 配置JDBC事务控制,由mybatis进行管理 --> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${name}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <!-- package 注册指定包下的所有映射文件,该方法要求mapper接口与mapper映射文件名称一样且在同一目 录下 --> <package name="com.test.mapper"/> </mappers> </configuration>
还有一些其它的配置如 参数设置setting 类型处理器typeHandler 、插件plugins、对象工厂objectFactory 就不讲了
5 查询
5.1 准备文件
首先在pojo包和mapper包中建立文件
5.2 表
在数据库中建表,id是自增的。
插入一个数据
5.3 Admin类
编写Admin类
public class Admin { private Integer id; private String name; 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; } }
5.4 AdminMapper.xml
首先在navicat中检查语句写法是否正确。
有结果,语句正确。
mapper的namespace属性可以有三种写法,具体的区别见参考链接2,使用查询语句,所以是select标签,返回值是String,所以resultType设置为java.lang.string,最终如下所示
<?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.mapper.AdminMapper"> <select id="findAdminById" resultType="java.lang.String"> select name from admin where id ='1'; </select> </mapper>
5.5 AdminMapper接口
要注意方法名和xml中的id相同
public interface AdminMapper { public String findAdminById(); }
5.6 主方法
public class Test { public static void main(String[] args) { //配置文件名称 String resource="SqlMapConfig"; try { //读取配置文件 InputStream inputStream=Resources.getResourceAsStream(resource); //实例化会话工厂 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //打开会话 SqlSession sqlSession=sqlSessionFactory.openSession(); //执行查询 String name=sqlSession.selectOne("findAdminById"); System.out.println(name); //关闭会话 sqlSession.close(); } catch (Exception e) { // TODO: handle exception } } }
5.7 运行
5.7.1 第一次运行
现象:控制台一点结果都没有
分析:catch语句块中没有处理。
解决办法:在catch语句块中加入e.printStackTrace();
5.7.2 第二次运行
现象:Could not find resource SqlMapConfig
分析:找不到配置文件
解决办法:将
String resource="SqlMapConfig";改为String resource=“SqlMapConfig.xml”;
5.7.3 第三次运行
现象:unknow column ‘name’ in field list
分析:SQL语句错误,可能是name是关键字
解决办法:查阅资料(参考链接3)后将name前后加上反引号,在此运行后仍是报错,加单引号后再次运行
5.7.4 第四次运行
现象:ClassCastException
分析:转型错误
解决办法:修改
Admin admin=sqlSession.selectOne("findAdminById");为
String admin=sqlSession.selectOne("findAdminById");,并修改输出语句为
System.out.println(admin);
5.7.5 第五次运行
现象:控制台输出name
分析:有结果,但是结果不对,说明sql语句错了,在navicat中执行
select name运行结果也是找到name,说明不可以放单引号。
解决办法:将数据库中的表和xml文件中的字段名重命名,再次运行
5.7.6 最终解决
修改回去以后还是找不到列名,最后找了半天想起来换了一个数据库没改db.properties中的内容,修改完就可以了重试
6 结语
1.本来想写成一篇,但是内容实在太多,就分篇写了,下一篇具体介绍一下MyBatis的查询。
2.eclipse生成的try catch可能不会输出错误信息,要自己修改catch中的语句。
3.有时候错误往往就藏在细枝末节里面,找半天还找不出来那种,这时候重新按照项目流程走一遍,细心检查各项参数可能就找到解决办法了。
4.这一篇编写时间太长,中间因为一些事情耽误了,如果有什么问题的话欢迎在评论区指正。
7 参考链接
1.MyBatis environments(配置环境)元素标签及其属性、设置
2.Mybatis的mapper标签 namespace方法说明
MySQL字段命名不能使用的MySQL关键字
3.Mybatis 出现The error may involve defaultParameterMap
2020-08-03 更新
如果是增删改则需要提交事务
- OpenCV学习笔记(8)VS2008 MFC下使用OpenCV2.0进行简单图像处理
- 使用C++进行WMI查询的简单封装
- 使用笔记:mysql与oracle进行sql查询时如何表示日期
- 学校 2012 8-9月 java 实训 简单 笔记
- mybatis简单sql使用java注解而不是xml配置
- 使用Java语言进行2D游戏编程基础 Fundamental 2D Game Programming with Java 全书笔记(未完结)
- java操作elasticsearch使用QueryBuilders进行数据查询
- Java学习笔记32:Spring整合mybatis使用
- 使用Java在本地创建一个服务器 ,通过浏览器对其进行访问的一个简单测试
- myBatis 操作 mysql时,使用 like 关键进行模糊查询的方法
- java笔记之使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件2种方法
- MyBatis(一) 不使用MyBatis做一个简单的查询
- 使用spring task进行Java定时任务开发(超简单)
- Java web--使用MyBatis的通用Mapper对复杂繁琐的数据业务层进行抽离【亲测很暴力】
- Mybatis中使用Association元素进行一对一级联查询
- OpenCV学习笔记(8)VS2008 MFC下使用OpenCV2.0进行简单图像处理
- java学习笔记之使用MyEclipse写一个简单的登陆界面(二)
- Java项目开发环境构建工具 Gradle 使用笔记(简单、基本)
- java学习笔记:使用zip api进行文件解压缩以及不解压直接读取指定文件内容
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题