【梗概】

1.根据XML配置文件(全局配置文件,有数据源的一些运行信息)创建一个SqlSessionFactory对象。

2.sql映射文件:配置了每一个sql以及sql的封装规则。

3.将sql映射文件注册在全局配置文件中。

4写代码:

(1)根据全局配置文件得到SqlSessionFactory。

(2)使用SqlSession工厂,得到sqlSession对象,使用它进行增删改查。一个sqlSession就是代表和数据库的一次会话,用完关闭。

(3)使用sql的唯一标识来告诉Mybatis执行执行哪个sql。sql都保存在sql映射文件中。

【编写第一个基于Mybatis的程序】

(1)添加jar包

Mybatis:mybatis-3.1.1.jar

MySQL驱动包:mysql-connector-java-5.1.7-bin.jar

(2)建库+表

  1. create database mybatis;
  2. use mybatis;
  3. CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
  4. INSERT INTO users(NAME, age) VALUES('Tom', 12);
  5. INSERT INTO users(NAME, age) VALUES('Jack', 11);

(3) 添加 Mybatis  的配置文件 conf.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <environments default="development">
  6. 6 <environment id="development">
  7. <transactionManager type="JDBC" />
  8. <dataSource type="POOLED">
  9. <property name="driver" value="com.mysql.jdbc.Driver" />
  10. <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
  11. <property name="username" value="root" />
  12. <property name="password" value="root" />
  13. </dataSource>
  14. </environment>
  15. </environments>
  16. </configuration>

(4) 定义表所对应的实体类

  1. public class User {
  2. private int id;
  3. private String name;
  4. private int age;
  5. //get,set 方法
  6. }

(5)定义操作 users  表的 sql  映射文件 userMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace=" com.atguigu.mybatis_test.test1.userMapper">
  5. <select id="getUser" parameterType="int"
  6. resultType="com.atguigu.mybatis_test.test1.User">
  7. select * from users where id=#{id}
  8. </select>
  9. </mapper>

(6)在 在 conf.xml  文件中注册 userMapper.xml

  1. <mappers>
  2. <mapper resource="com/atguigu/mybatis_test/test1/userMapper.xml"/>
  3. </mappers>

(7)编写测试代码:执行定义的 select  语句

  1. public class Test {
  2. public static void main(String[] args) throws IOException {
  3. String resource = "conf.xml";
  4.  
  5. //加载 mybatis 的配置文件(它也加载关联的映射文件)
  6. Reader reader = Resources.getResourceAsReader(resource);
  7.  
  8. //构建 sqlSession 的工厂
  9. SqlSessionFactory sessionFactory = new
  10. SqlSessionFactoryBuilder().build(reader);
  11.  
  12. //创建能执行映射文件中 sql 的 sqlSession
  13. SqlSession session = sessionFactory.openSession();
  14.  
  15. //映射 sql 的标识字符串
  16. String statement = "com.atguigu.mybatis.bean.userMapper"+".selectUser";
  17.  
  18. //执行查询返回一个唯一 user 对象的 sql
  19. User user = session.selectOne(statement, 1);
  20. System.out.println(user);
    }
  21. }

【操作 users  表的 CRUD】

1).  定义 sql  映射 xml  文件

  1. <insert id="insertUser" parameterType="com.atguigu.ibatis.bean.User">
  2. insert into users(name, age) values(#{name}, #{age});
  3. </insert>
  4. <delete id="deleteUser" parameterType="int">
  5. delete from users where id=#{id}
  6. </delete>
  7. <update id="updateUser" parameterType="com.atguigu.ibatis.bean.User">
  8. update users set name=#{name},age=#{age} where id=#{id}
  9. </update>
  10. <select id="selectUser" parameterType="int" resultType="com.atguigu.ibatis.bean.User">
  11. select * from users where id=#{id}
  12. </select>
  13. <select id="selectAllUsers" resultType="com.atguigu.ibatis.bean.User">
  14. select * from users
  15. </select>

2). 在 在 config.xml  中注册这个映射文件

  1. <mapper resource="net/lamp/java/ibatis/bean/userMapper.xml"/>

3). 在 在 dao  中调用:

  1. public User getUserById(int id) {
  2. SqlSession session = sessionFactory.openSession();
  3. User user = session.selectOne(URI+".selectUser", id);
  4. return user;
  5. }

【注解的实现】

1).  定义 sql  映射的接口

  1. public interface UserMapper {
  2. @Insert("insert into users(name, age) values(#{name}, #{age})")
  3. public int insertUser(User user);
  4. @Delete("delete from users where id=#{id}")
  5. public int deleteUserById(int id);
  6. @Update("update users set name=#{name},age=#{age} where id=#{id}")
  7. public int updateUser(User user);
  8. @Select("select * from users where id=#{id}")
  9. public User getUserById(int id);
  10. @Select("select * from users")
  11. public List<User> getAllUser();
  12. }

2). 在 在 config  中注册这个映射接口

  1. <mapper class="com.atguigu.ibatis.crud.ano.UserMapper"/>

3). 在 在 dao  类中调用

  1. public User getUserById(int id) {
  2. SqlSession session = sessionFactory.openSession();
  3. UserMapper mapper = session.getMapper(UserMapper.class);
  4. User user = mapper.getUserById(id);
  5. return user;
  6. }

【几个可以优化的地方】

(1)连接数据库的配置单独放在一个 properties  文件中

  1. ## db.properties
  2. <properties resource="db.properties"/>
  3. <property name="driver" value="${driver}" />
  4. <property name="url" value="${url}" />
  5. <property name="username" value="${username}" />
  6. <property name="password" value="${password}" />

(2)为实体类定义别名, 简化 sql  映射 xml  文件中的引用

  1. <typeAliases>
  2. <typeAlias type="com.atguigu.ibatis.bean.User" alias="_User"/>
  3. </typeAliases>

(3)可以在 src  下加入 log4j  的配置文件, 打印日志信息

1. 添加 jar:
log4j-1.2.16.jar

2. log4j.properties(

log4j.properties,
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

3.log4j.xml( 方式二)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="debug" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>

Mybatis_HelloWorld的更多相关文章

  1. mybatis_helloworld(2)_源码

    摘录自:http://blog.csdn.net/y172158950/article/details/16982123 在helloworld(1)中,分析了insert一条数据的流程,现在分析下源 ...

  2. java之mybatis之helloworld

    1. MyBatis 是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架. MyBatis几乎消除了所有的 JDBC 代码,也基本不需要手工去设置参数和获取检索结果. MyBatis几乎能够 ...

  3. ORM框架对比以及Mybatis配置文件详解

    ORM框架对比以及Mybatis配置文件详解 0.数据库操作框架的历程 (1) JDBC ​ JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句 ...

随机推荐

  1. javascript监听值变化

    最近面了有道前端实习,人品爆发一面过了.但是在一面中面试官问了一个问题”MVC用javascript如何实现?如果实现双向绑定?值变化监听?“ 当时我回答”js好像没函数进行值变化监听“ 后来想想很不 ...

  2. [C++11新特性] 智能指针详解

    动态内存的使用很容易出问题,因为确保在正确的时间释放内存是极为困难的.有时我们会忘记释放内存产生内存泄漏,有时提前释放了内存,再使用指针去引用内存就会报错. 为了更容易(同时也更安全)地使用动态内存, ...

  3. Oracle10g修改数据库字符集

    Oracle10g修改字符集记录: 版本:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production 参考 ...

  4. taskkill帮助信息

    taskkill帮助信息: C:\Users\xusweeter>taskkill /? TASKKILL [/S system [/U username [/P [password]]]] { ...

  5. 为什么JAVA虚拟机分为线程共享和非线程共享?

    大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) , VM Stack(虚拟 ...

  6. 在spring boot 中使用itext和itextrender生成pdf文件

    转载请注明出处 https://www.cnblogs.com/majianming/p/9539376.html 项目中需要对订单生成pdf文件,在第一版本其实已经有了比较满意的pdf文档,但是还是 ...

  7. 设计模式 -- Abstract Factory 抽象工厂

    1.常规的对象创建方法 //创建一个Road对象 Road road=new Road(); new的问题:实现依赖,不能应对“具体实例化类型”额变化. 解决思想: 封装变化点--哪里变化,封装哪里( ...

  8. Java集合框架源码(三)——arrayList

    1. ArrayList概述: ArrayList是List接口的可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部 ...

  9. iTOP4418开发板7寸屏幕Android系统下横竖屏设置

    Android系统屏幕旋转设置 平台: iTOP4418开发板+7寸屏幕 1. Androd4.4源码可以编译成手机模式和平板模式,讯为iTop4418 开发平台的Android系统默认编译为平板模式 ...

  10. IMX6核心板系列解决方案-工业级|商业级|四核|双核|Plus核心板

    i.MX 6Quad四核商业级和工业级系列的应用处理器将可扩展平台与广泛的集成和高能效处理功能相结合,尤其适合多媒体应用.i.MX6 Quad处理器的特性包括: 满足操作系统和游戏的MIPS需求,增强 ...