单独使用MyBatis的简单示例:
mybaties-config.xml:
MyBatis配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3.  
  4. <configuration>
  5. <typeAliases><!-- 别名 -->
  6. <typeAlias alias="role" type="com.xc.pojo.Role"/>
  7. </typeAliases> <!-- 数据库环境 -->
  8. <environments default="development">
  9. <environment id="development">
  10. <transactionManager type="JDBC"/>
  11. <dataSource type="POOLED">
  12. <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  13. <property name="url" value="jdbc:mysql://localhost:3306/springmvc?useSSL=false&amp;serverTimezone=Hongkong&amp;characterEncoding=utf-8&amp;autoReconnect=true"/>
  14. <property name="username" value="root"/>
  15. <property name="password" value="123456"/>
  16. </dataSource>
  17. </environment>
  18. </environments> <!-- 映射文件 -->
  19. <mappers>
  20. <mapper resource="mapper/RoleMapper.xml"/>
  21. </mappers>
  22. </configuration>

Role.java:
POJO对象
构造一个POJO对象。最终查询会映射到它上面,或者将其保存到数据库中。

  1. package com.xc.pojo;
  2.  
  3. public class Role {
  4.  
  5. //CREATE TABLE `t_role` (
  6. // `id` int(12) NOT NULL AUTO_INCREMENT,
  7. // `role_name` varchar(60) NOT NULL,
  8. // `note` varchar(512) DEFAULT NULL,
  9. // PRIMARY KEY (`id`)
  10. // )
  11.  
  12. private Long id;
  13. private String roleName;
  14. private String note;
  15.  
  16. //get...set...
  17. }

RoleMapper.java:
映射器接口
其中,insertRole代表插入一个Role对象;deleteRole则是删除;updateRole是修改一个Role对象;getRole是获取一个Role对象;findRoles则是通过角色名称获得一个角色对象列表。

  1. package com.xc.mapper;
  2.  
  3. import com.xc.pojo.Role;
  4. import org.apache.ibatis.annotations.Select;
  5.  
  6. import java.util.List;
  7.  
  8. public interface RoleMapper {
  9.  
  10. public Role getRole(Long id);
  11.  
  12. @Select("select id, role_name as roleName, note from t_role where id=#{id}")
  13. public Role getRole2(Long id);
  14.  
  15. public int insertRole(Role role);
  16.  
  17. public int deleteRole(Long id);
  18.  
  19. public int updateRole(Role role);
  20.  
  21. public List<Role> findRoles(String roleName);
  22.  
  23. }

RoleMapper.xml:
映射器XML文件,描述映射关系,SQL等内容
这是一些比较简单的SQL语句,insert、delete、select、update元素代表了增、删、查、改,而它们里面的元素id则标识了对应的SQL。parameterType标出了是什么类型的参数,re-sultType则代表结果映射成为什么类型。其中insert、delete和update返回的都是影响条数。

  1. <?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">
  2. <mapper namespace="com.xc.mapper.RoleMapper">
  3. <insert id="insertRole" parameterType="role">
        insert into t_role(role_name, note) values(#{roleName}, #{note}) </insert>
  4. <delete id="deleteRole" parameterType="long">
        delete from t_role where id= #{id} </delete>
  5. <update id="updateRole" parameterType="role">
        update t_role set role_name = #{roleName}, note = #{note} where id= #{id} </update>
  6. <select id="getRole" parameterType="long" resultType="role">
        select id, role_name as roleName, note from t_role where id = #{id} </select>
  7. <select id="findRoles" parameterType="string" resultType="role">
        select id, role_name as roleName, note from t_role where role_name like concat('%', #{roleName}, '%') </select>
  8. </mapper>

Chapter3Main测试类:
程序入口,拥有main方法

  1. import com.xc.mapper.RoleMapper;
  2. import com.xc.pojo.Role;
  3. import org.apache.ibatis.io.Resources;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.apache.ibatis.session.SqlSessionFactory;
  6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  7.  
  8. import java.io.IOException;
  9. import java.io.InputStream;
  10.  
  11. public class test {
  12.  
  13. public static void main(String[] args) {
  14.  
  15. String resource = "mybatis-config.xml";
  16. try {
  17.  
  18. InputStream inputStream = Resources.getResourceAsStream(resource);
  19. //SqlSessionFactoryBuilder(构造器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分步构建的Builder模式。
  20. //SqlSessionFactory(工厂接口):依靠它来生成SqlSession,使用的是工厂模式。
  21. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  22.  
  23. //SqlSession(会话):一个既可以发送SQL执行返回结果,也可以获取Mapper的接口。在现有的技术中,一般我们会让其在业务逻辑代码中“消失”,而使用的是MyBatis提供的SQL Mapper接口编程技术,它能提高代码的可读性和可维护性。
  24. SqlSession sqlSession = sqlSessionFactory.openSession();
  25. //SQL Mapper(映射器):MyBatis新设计存在的组件,它由一个Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。
  26. RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
  27. Role role = roleMapper.getRole(1L);
  28. System.out.println(role.toString());
  29. Role role2 = roleMapper.getRole2(1L);
  30. System.out.println(role2.toString());
  31.  
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35.  
  36. }
  37. }

Chapter3Main2测试类:

  1. package com.xc.main;
  2.  
  3. import com.xc.mapper.RoleMapper;
  4. import com.xc.pojo.Role;
  5. import com.xc.util.SqlSessionFactoryUtils;
  6. import org.apache.ibatis.session.SqlSession;
  7. import org.apache.log4j.Logger;
  8.  
  9. public class Chapter3Main2 {
  10.  
  11. // Logger log = Logger.getLogger(Chapter3Main.class);
  12. private static Logger log = Logger.getLogger(Chapter3Main2.class);
  13.  
  14. public static void main(String[] args) {
  15.  
  16. SqlSession sqlSession = null;
  17. try {
  18. sqlSession = SqlSessionFactoryUtils.openSqlSession();
  19. //通过SqlSession获取了一个RoleMapper接口对象
  20. RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
  21. //通过getRole方法获取对象
  22. Role role = roleMapper.getRole(1L);
  23. log.info(role.getRoleName());
  24. } finally {
  25. if (sqlSession != null) {
  26. //正确关闭SqlSession对象
  27. sqlSession.close();
  28. }
  29. }
  30. }
  31. }

SqlSessionFactoryUtils.java:

  1. package com.xc.util;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5.  
  6. import org.apache.ibatis.io.Resources;
  7. import org.apache.ibatis.session.SqlSession;
  8. import org.apache.ibatis.session.SqlSessionFactory;
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  10.  
  11. /**
  12. * 使用mybatis-config.xml文件,通过SQLSessionFactory-Builder来构建SqlSessionFactory。由于SqlSessionFactory应该采用单例模式,所以这里使用单例模式去构建它
  13. */
  14. public class SqlSessionFactoryUtils {
  15.  
  16. private final static Class<SqlSessionFactoryUtils> LOCK = SqlSessionFactoryUtils.class;
  17. private static SqlSessionFactory SqlSessionFactory = null;
  18.  
  19. //构造方法中加入了private关键字,使得其他代码不能通过new的方式来创建它。
  20. private SqlSessionFactoryUtils() {
  21. }
  22.  
  23. public static SqlSessionFactory getSqlSessionFactory() {
  24. //加入synchronized关键字加锁,主要是为了防止在多线程中多次实例化SqlSessionFactory对象,从而保证SqlSessionFactory的唯一性。
  25. synchronized (LOCK) {
  26. if (SqlSessionFactory != null) {
  27. return SqlSessionFactory;
  28. }
  29. String resource = "mybatis-config.xml";
  30. InputStream inputStream;
  31. try {
  32. inputStream = Resources.getResourceAsStream(resource);
  33. SqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  34. } catch (IOException e) {
  35. e.printStackTrace();
  36. return null;
  37. }
  38. return SqlSessionFactory;
  39. }
  40. }
  41.  
  42. //openSqlSession方法的作用则是创建SqlSession对象。
  43. public static SqlSession openSqlSession() {
  44. if (SqlSessionFactory == null) {
  45. getSqlSessionFactory();
  46. }
  47. return SqlSessionFactory.openSession();
  48. }
  49. }

log4j.properties

通过logj4.properties文件配置,让MyBatis打印了其运行过程的轨迹。我们可以清晰地看到了日志打印出来的SQL、SQL参数,以及返回的结果数,这样有利于监控MyBatis的运行过程和定位问题的所在。

  1. log4j.rootLogger=DEBUG,stdout
  2. log4j.logger.org.mybatis=DEBUG
  3. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  5. log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n

附:

pom.xml

  1. <properties>
  2. <slf4j.version>1.7.12</slf4j.version>
  3. </properties>
  4.  
  5. <!-- 日志文件管理包 -->
  6. <dependency>
  7. <groupId>log4j</groupId>
  8. <artifactId>log4j</artifactId>
  9. <version>1.2.17</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.slf4j</groupId>
  13. <artifactId>slf4j-api</artifactId>
  14. <version>${slf4j.version}</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.slf4j</groupId>
  18. <artifactId>slf4j-log4j12</artifactId>
  19. <version>${slf4j.version}</version>
  20. </dependency>
  21.  
  22. <!--<dependency>
  23. <groupId>mysql</groupId>
  24. <artifactId>mysql-connector-java</artifactId>
  25. <version>5.1.25</version>
  26. </dependency>-->
  27. <dependency>
  28. <groupId>mysql</groupId>
  29. <artifactId>mysql-connector-java</artifactId>
  30. <version>8.0.12</version>
  31. </dependency>
  32. <!-- mybatis -->
  33. <dependency>
  34. <groupId>org.mybatis</groupId>
  35. <artifactId>mybatis</artifactId>
  36. <version>3.4.1</version>
  37. </dependency>

单独使用MyBatis的简单示例的更多相关文章

  1. Mybatis的简单示例

    首先新建一个JavaWeb项目并导入mybatis依赖的jar包,同时Mybatis是对数据库的操作所以我们需要在数据库中新建一个表user用来演示. 新建完表之后我们还需要建立相对应的实体类User ...

  2. 使用MyBatis搭建一个访问mysql数据库的简单示例

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...

  3. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  4. C# 构建XML(简单示例)

    C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...

  5. 根据juery CSS点击一个标签弹出一个遮罩层的简单示例

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. ACEXML解析XML文件——简单示例程序

    掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...

  7. demo工程的清单文件及activity中api代码简单示例

    第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...

  8. spring-servlet.xml简单示例

    spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...

  9. SignalR 简单示例

    一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...

随机推荐

  1. 为何基于tcp协议的通信比基于udp协议的通信更可靠?

    tcp协议一定是先建好双向链接,发一个数据包要得到确认才算发送完成,没有收到就一直给你重发:udp协议没有链接存在,udp直接丢数据,不管你有没有收到. TCP的可靠保证,是它的三次握手双向机制,这一 ...

  2. jquery页面多个倒计时效果

    <div class="timeBox" data-times="2019/06/30,23:59:59"> 距结束 <span class= ...

  3. nginx 超时配置、根据域名、端口、链接 配置不同跳转

    Location正则表达式location的作用  location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作. locatio ...

  4. /etc/shells

    List of acceptable shells for chpass(1). Ftpd will not allow users to connect who are not using one ...

  5. printf的使用和test的使用

    1.printf的使用 printf的转义序列 序列 说明 \a 警告字符,通常为ASCII的BEL字符 \b 后退 \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字 ...

  6. 洛谷P1650赛马与codevs 2181 田忌赛马

    洛谷P1650 赛马 题目描述 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马.他和齐王都有三匹马:常规马,上级马,超级马.一共赛三局,每局的胜者可以从负 ...

  7. php读取邮件

    <?php header("Content-type: text/html; charset=utf-8"); class mail { private $server='' ...

  8. SpringCloud:Ribbon负载均衡

    1.概述 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端       负载均衡的工具. 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客 ...

  9. ManualResetEven使用的最清楚说明

    ManualResetEven使用的最清楚说明 快速阅读 理解ManualResetEvent,以及如何使用. 官方说明 官方介绍:https://docs.microsoft.com/en-us/d ...

  10. Cheat Engine TUTORIAL 教程 (8个步骤)

    https://www.cnblogs.com/ae6623/archive/2011/04/16/4416874.html https://www.52pojie.cn/thread-828030- ...