【梗概】

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)建库+表

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

(3) 添加 Mybatis  的配置文件 conf.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>
<environments default="development">
6 <environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
</configuration>

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

 public class User {
private int id;
private String name;
private int age;
//get,set 方法
}

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

 <?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.atguigu.mybatis_test.test1.userMapper">
<select id="getUser" parameterType="int"
resultType="com.atguigu.mybatis_test.test1.User">
select * from users where id=#{id}
</select>
</mapper>

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

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

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

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

【操作 users  表的 CRUD】

1).  定义 sql  映射 xml  文件

 <insert id="insertUser" parameterType="com.atguigu.ibatis.bean.User">
insert into users(name, age) values(#{name}, #{age});
</insert>
<delete id="deleteUser" parameterType="int">
delete from users where id=#{id}
</delete>
<update id="updateUser" parameterType="com.atguigu.ibatis.bean.User">
update users set name=#{name},age=#{age} where id=#{id}
</update>
<select id="selectUser" parameterType="int" resultType="com.atguigu.ibatis.bean.User">
select * from users where id=#{id}
</select>
<select id="selectAllUsers" resultType="com.atguigu.ibatis.bean.User">
select * from users
</select>

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

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

3). 在 在 dao  中调用:

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

【注解的实现】

1).  定义 sql  映射的接口

 public interface UserMapper {
@Insert("insert into users(name, age) values(#{name}, #{age})")
public int insertUser(User user);
@Delete("delete from users where id=#{id}")
public int deleteUserById(int id);
@Update("update users set name=#{name},age=#{age} where id=#{id}")
public int updateUser(User user);
@Select("select * from users where id=#{id}")
public User getUserById(int id);
@Select("select * from users")
public List<User> getAllUser();
}

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

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

3). 在 在 dao  类中调用

 public User getUserById(int id) {
SqlSession session = sessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.getUserById(id);
return user;
}

【几个可以优化的地方】

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

## db.properties
<properties resource="db.properties"/>
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />

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

 <typeAliases>
<typeAlias type="com.atguigu.ibatis.bean.User" alias="_User"/>
</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. Qt事件系统之二:鼠标事件和滚轮事件

    在Qt中,事件作为一个对象,继承自 QEvent 类,常见的有键盘事件 QKeyEvent.鼠标事件 QMouseEvent 和定时器事件 QTimerEvent 等,与 QEvent 类的继承关系图 ...

  2. ural1076 Trash 垃圾

    Description You were just hired as CEO of the local junkyard.One of your jobs is dealing with the in ...

  3. 洛谷 P2042 维护数列

    http://blog.csdn.net/drazxlnddt/article/details/51051598 flip为true表示以当前节点为根的子树需要交换.set为true表示以当前节点为根 ...

  4. Windowsforms 中 进程,线程

    进程: 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动. 它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体. Process 类,用来操作进程. 命名空间:using Syst ...

  5. $.ajax json 在本地正常 上传服务器不正常

    $.ajax( {                        url:"url",// 跳转到 action                        data:{name ...

  6. WPF学习09:数据绑定之 Binding to List Data

    从WPF学习03:Element Binding我们可以实现控件属性与控件属性的绑定. 从WPF学习07:MVVM 预备知识之数据绑定 我们可以实现控件属性与自定义对象属性的绑定. 而以上两个功能在实 ...

  7. Linux之测试服务器和端口连通

    目录 wget工具 telnet工具 ssh工具 wget工具: 该工具是网络自动下载工具,如果linux或centos中不存在,需要先安装,支持http.https.ftp协议,wget名称的由来是 ...

  8. Windows下使用JMeter

    简介 Apache JMeter是100%纯java桌面应用程序,被设计用来测试C/S结构的软件(例如web应用程序).它可以被用来测试包括基于静态和动态资源程序的性能,例如静态文件,Java Ser ...

  9. SQL Server中行列转置方法

    PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P ...

  10. HDU_1237_简单计算器

    运算符为+,-,*,/:操作数为整数:且没有括号 设定符号优先级,先在栈底压运算符0 #include<iostream> #include<cstdio> #include& ...