单独使用MyBatis的简单示例
单独使用MyBatis的简单示例:
mybaties-config.xml:
MyBatis配置文件
<?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>
<typeAliases><!-- 别名 -->
<typeAlias alias="role" type="com.xc.pojo.Role"/>
</typeAliases> <!-- 数据库环境 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springmvc?useSSL=false&serverTimezone=Hongkong&characterEncoding=utf-8&autoReconnect=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments> <!-- 映射文件 -->
<mappers>
<mapper resource="mapper/RoleMapper.xml"/>
</mappers>
</configuration>
Role.java:
POJO对象
构造一个POJO对象。最终查询会映射到它上面,或者将其保存到数据库中。
package com.xc.pojo; public class Role { //CREATE TABLE `t_role` (
// `id` int(12) NOT NULL AUTO_INCREMENT,
// `role_name` varchar(60) NOT NULL,
// `note` varchar(512) DEFAULT NULL,
// PRIMARY KEY (`id`)
// ) private Long id;
private String roleName;
private String note; //get...set...
}
RoleMapper.java:
映射器接口
其中,insertRole代表插入一个Role对象;deleteRole则是删除;updateRole是修改一个Role对象;getRole是获取一个Role对象;findRoles则是通过角色名称获得一个角色对象列表。
package com.xc.mapper; import com.xc.pojo.Role;
import org.apache.ibatis.annotations.Select; import java.util.List; public interface RoleMapper { public Role getRole(Long id); @Select("select id, role_name as roleName, note from t_role where id=#{id}")
public Role getRole2(Long id); public int insertRole(Role role); public int deleteRole(Long id); public int updateRole(Role role); public List<Role> findRoles(String roleName); }
RoleMapper.xml:
映射器XML文件,描述映射关系,SQL等内容
这是一些比较简单的SQL语句,insert、delete、select、update元素代表了增、删、查、改,而它们里面的元素id则标识了对应的SQL。parameterType标出了是什么类型的参数,re-sultType则代表结果映射成为什么类型。其中insert、delete和update返回的都是影响条数。
<?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.xc.mapper.RoleMapper">
<insert id="insertRole" parameterType="role">
insert into t_role(role_name, note) values(#{roleName}, #{note}) </insert>
<delete id="deleteRole" parameterType="long">
delete from t_role where id= #{id} </delete>
<update id="updateRole" parameterType="role">
update t_role set role_name = #{roleName}, note = #{note} where id= #{id} </update>
<select id="getRole" parameterType="long" resultType="role">
select id, role_name as roleName, note from t_role where id = #{id} </select>
<select id="findRoles" parameterType="string" resultType="role">
select id, role_name as roleName, note from t_role where role_name like concat('%', #{roleName}, '%') </select>
</mapper>
Chapter3Main测试类:
程序入口,拥有main方法
import com.xc.mapper.RoleMapper;
import com.xc.pojo.Role;
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 java.io.IOException;
import java.io.InputStream; public class test { public static void main(String[] args) { String resource = "mybatis-config.xml";
try { InputStream inputStream = Resources.getResourceAsStream(resource);
//SqlSessionFactoryBuilder(构造器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分步构建的Builder模式。
//SqlSessionFactory(工厂接口):依靠它来生成SqlSession,使用的是工厂模式。
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //SqlSession(会话):一个既可以发送SQL执行返回结果,也可以获取Mapper的接口。在现有的技术中,一般我们会让其在业务逻辑代码中“消失”,而使用的是MyBatis提供的SQL Mapper接口编程技术,它能提高代码的可读性和可维护性。
SqlSession sqlSession = sqlSessionFactory.openSession();
//SQL Mapper(映射器):MyBatis新设计存在的组件,它由一个Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
Role role = roleMapper.getRole(1L);
System.out.println(role.toString());
Role role2 = roleMapper.getRole2(1L);
System.out.println(role2.toString()); } catch (IOException e) {
e.printStackTrace();
} }
}
Chapter3Main2测试类:
package com.xc.main; import com.xc.mapper.RoleMapper;
import com.xc.pojo.Role;
import com.xc.util.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger; public class Chapter3Main2 { // Logger log = Logger.getLogger(Chapter3Main.class);
private static Logger log = Logger.getLogger(Chapter3Main2.class); public static void main(String[] args) { SqlSession sqlSession = null;
try {
sqlSession = SqlSessionFactoryUtils.openSqlSession();
//通过SqlSession获取了一个RoleMapper接口对象
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
//通过getRole方法获取对象
Role role = roleMapper.getRole(1L);
log.info(role.getRoleName());
} finally {
if (sqlSession != null) {
//正确关闭SqlSession对象
sqlSession.close();
}
}
}
}
SqlSessionFactoryUtils.java:
package com.xc.util; 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; /**
* 使用mybatis-config.xml文件,通过SQLSessionFactory-Builder来构建SqlSessionFactory。由于SqlSessionFactory应该采用单例模式,所以这里使用单例模式去构建它
*/
public class SqlSessionFactoryUtils { private final static Class<SqlSessionFactoryUtils> LOCK = SqlSessionFactoryUtils.class;
private static SqlSessionFactory SqlSessionFactory = null; //构造方法中加入了private关键字,使得其他代码不能通过new的方式来创建它。
private SqlSessionFactoryUtils() {
} public static SqlSessionFactory getSqlSessionFactory() {
//加入synchronized关键字加锁,主要是为了防止在多线程中多次实例化SqlSessionFactory对象,从而保证SqlSessionFactory的唯一性。
synchronized (LOCK) {
if (SqlSessionFactory != null) {
return SqlSessionFactory;
}
String resource = "mybatis-config.xml";
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
return null;
}
return SqlSessionFactory;
}
} //openSqlSession方法的作用则是创建SqlSession对象。
public static SqlSession openSqlSession() {
if (SqlSessionFactory == null) {
getSqlSessionFactory();
}
return SqlSessionFactory.openSession();
}
}
log4j.properties
通过logj4.properties文件配置,让MyBatis打印了其运行过程的轨迹。我们可以清晰地看到了日志打印出来的SQL、SQL参数,以及返回的结果数,这样有利于监控MyBatis的运行过程和定位问题的所在。
log4j.rootLogger=DEBUG,stdout
log4j.logger.org.mybatis=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n
附:
pom.xml
<properties>
<slf4j.version>1.7.12</slf4j.version>
</properties> <!-- 日志文件管理包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency> <!--<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
单独使用MyBatis的简单示例的更多相关文章
- Mybatis的简单示例
首先新建一个JavaWeb项目并导入mybatis依赖的jar包,同时Mybatis是对数据库的操作所以我们需要在数据库中新建一个表user用来演示. 新建完表之后我们还需要建立相对应的实体类User ...
- 使用MyBatis搭建一个访问mysql数据库的简单示例
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...
- Linux下的C Socket编程 -- server端的简单示例
Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...
- C# 构建XML(简单示例)
C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...
- 根据juery CSS点击一个标签弹出一个遮罩层的简单示例
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- ACEXML解析XML文件——简单示例程序
掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...
- demo工程的清单文件及activity中api代码简单示例
第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...
- spring-servlet.xml简单示例
spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...
- SignalR 简单示例
一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...
随机推荐
- Flask - 四剑客 | templates | 配置文件 | 路由系统 | CBV
Flask框架简介 说明:flask是一个轻量级的web框架,被称为微型框架.只提供了一个高效稳定的核心,其它全部通过扩展来实现.意思就是你可以根据项目需要进行量身定制,也意味着你需要不断学习相关的扩 ...
- 2019-2020-1 20199312《Linux内核原理与分析》第七周作业
进程的描述 操作系统内核实现操作系统的三大管理功能 进程管理(内核中最核心的功能) 内存管理 文件系统 在操作系统中,我们通过进程控制块PCB描述进程. 为了管理进程,内核必须对每个进程进行清晰的描述 ...
- python为什么不需要重载函数
https://www.cnblogs.com/erbaodabao0611/p/7490439.html
- commons-dbutils 字段名称转换,支持驼峰字段名
你能遇到的问题,只要是普遍存在的,大家都会遇到,那么,就一定有现成的解决方案. 在阅读 commons-dbutils 的文档时, BeanHandler 的第二个参数可以达到这个目的.只需传入一个实 ...
- P3709 大爷的字符串题 脑子+莫队
简化题意:区间众数出现次数??? 为什么?原因是,贪心的想,我们要划分成尽量少的严格递增序列,这样rp掉的最少. 设区间众数出现次数为 \(x\) ,那我们至少要分成 \(x\) 段严格上升序列. # ...
- zabbix的历史数据存储到elasticsearch中
基本配置项 https://www.jianshu.com/p/bffca8128e8f 官方说这个实验性的功能支持es的版本是5.0.x - > 6.1.x,如果使用早期或更高版本的Elast ...
- 在Ubuntu 或 Debian 系统环境安装MYSQL数据库
一.第一步下载myslq安装程序 sudo apt-get install mysql-server mysql-client apt-get程序会自动下载安装最新的mysql版本.在安装的最后,它会 ...
- 码农,就要做有范儿的geek【网摘】
摘要: “我是个geek,圈子里都称呼我为xx,我周一到周五亲自写写代码,指导指导新人,周末参加圈子的活动,跟别人分享一下我的经验.至于未来嘛,还没想过,反正自己技术水平在这了,呵呵,扎克伯格当年不也 ...
- 用SAM实现后缀排序
因为本人几乎不会后缀数组,所以遇到这种SA的模板题也要拿SAM解决. 还是有一点思维难度的. 首先按照国际惯例,建反串的SAM. 然后对于这个反串,我们考虑两个前缀哪一个字典序小:因为是串是反的,所以 ...
- 06 、指令跳转:原来if...else就是goto
写好的代码编译成指令之后,一般正常流程是一条一条的顺序执行的.但是在程序中总会用到if...else这样的条件判断语句.while和for循环语句,还有函数或者过程调用,所以遇到这些程序编译的指令时是 ...