Mybatis_HelloWorld

【梗概】

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    <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  文件中

## 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  文件中的引用

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) " />
</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>

每接触一个新领域,我就像一块掉进水里的海绵,四面八方的养分都让我不断充实。O(∩_∩)O~
原文地址:https://www.cnblogs.com/zhzcode/p/9781747.html