Mybatis学习第⼀天——Mybatis的安装配置以及基本CURD操作2.Mybatis⽂件介绍
lib:mybatis依赖包;mybatis-3.4.6.jar:核⼼包;
创建⼀个项⽬,⽹站/后台随意,将核⼼包和lib中的依赖包全都添加到项⽬中的lib下,没有lib⾃⼰创建,创建路径build path。
导⼊mybatis包后,别忘了导⼊数据库连接包。
4.创建配置⽂件
创建config配置⽂件夹,⾸先配置l。该⽂件主要⽤来配置数据库连接环境,在没有spring进⾏管理的同时对数据源进⾏配置,同时设置与表的映射对象。
1<?xml version="1.0" encoding="UTF-8" ?>
2<!DOCTYPE configuration
3PUBLIC "-////DTD Config 3.0//EN"
4"/dtd/mybatis-3-config.dtd">
5<configuration>
6<!-- 和spring整合后 environments配置将废除 -->
7<environments default="development">
8<environment id="development">
9<!-- 使⽤jdbc事务管理 -->
10<transactionManager type="JDBC"/>
11<!-- 数据库连接池 -->
12<dataSource type="POOLED">
13<property name="driver" value="sql.jdbc.Driver"/>
14<property name="url"
15                    value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
16<property name="username" value="root"/>
17<property name="password" value="xxxx"/>
18</dataSource>
19</environment>
20</environments>
21
22<mappers>
23<mapper resource="l"/>
24</mappers>
25
26</configuration>
创建log4j.properties⽇志设置⽂件:
1 # Global logging configuration
Logger=DEBUG, stdout
3 #
4 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
5 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
6 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
全局的⽇志设置,主要⽤来打印在控制台中。
5.创建映射关系类
batis.pojo;
2
3import java.io.Serializable;
4import java.util.Date;
5
6public class User implements Serializable {
7private int id;
8private String username;// ⽤户姓名
9private String sex;// 性别
10private Date birthday;// ⽣⽇
11private String address;// 地址
在src⽬录下创建User类,添加⼏个简单的数据。注意:Mybatis⽆法像hibernate那样根据类⾃动创建表,访问数据库时必须保证数据库存在。
6.配置映射关系⽂件
可以下config⽬录下创建sqlmap⽂件夹,在其中创建l SQL映射⽂件:
1<?xml version="1.0" encoding="UTF-8" ?>
2<!DOCTYPE mapper
3PUBLIC "-////DTD Mapper 3.0//EN"
4"/dtd/mybatis-3-mapper.dtd">
5<!-- namespace:命名空间,⽤于隔离sql,还有⼀个很重要的作⽤,后⾯会讲 -->
6<mapper namespace="test">
7
8<select id="findUserById"
9    parameterType="Integer"
10    resultType="batis.pojo.User"
11>
12    select * from user where id = #{v}
13</select>
14
15</mapper>
(同样这⾥还是不知道dtd哪⾥的),mapper标签内主要写sql语句,⽤过select、update、delete标签进⾏区别,其中namespace属性为了区分相同id的SQL语句。
设置完之后在l⽂件中加载配置⽂件:
7.运⾏测试程序
测试程序步骤:
1. 创建SqlSessionFactoryBuilder对象
2. 加载l配置⽂件
3. 创建SqlSessionFactory对象
4. 创建SqlSession对象
5. 执⾏SqlSession对象执⾏查询,获取结果User
6. 打印结果
7. 释放资源
batis.junit;
2
3import static org.junit.Assert.*;
4
5import java.io.File;
6import java.io.InputStream;
7import java.util.Properties;
8
9import javax.annotation.Resource;
10
11import org.apache.ibatis.io.Resources;
12import org.apache.ibatis.session.SqlSession;
13import org.apache.ibatis.session.SqlSessionFactory;
14import org.apache.ibatis.session.SqlSessionFactoryBuilder;
15import org.junit.Test;
16
batis.pojo.User;
sql.jdbc.interceptors.SessionAssociationInterceptor;
19
20public class MybatisFirstTest {
21    @Test
22public void testName() throws Exception {
23//加载核⼼配置⽂件
24        String resource = "l";
25        InputStream in = ResourceAsStream(resource);
26
27//sessionFactory类
28        SqlSessionFactory sessionFactory =  new SqlSessionFactoryBuilder().build(in);
29
30//sqlSession
31        SqlSession sqlSession = sessionFactory.openSession();
32
33//执⾏sql语句
34        User user = sqlSession.selectOne("test.findUserById", 1);
35
36        System.out.Birthday());
37
38        sqlSession.close();
39    }
40 }
在执⾏sql语句过程中"test.findUserById"就是查的l⽂件中test域下的id为findUserById的SQL语句。
8.CURD操作
了解mybatis的运⾏流程,接下来分析下增删改查操作,测试代码都差不多,主要是执⾏sql语句的区别:
8.1 查询
dao层根据名字模糊查询,返回需要list。
在l中如下:
1    <!-- id表⽰dao层中根据这个调⽤
2        parameterType:传⼊数据的类型
3        resultType:返回结果类型(这⾥返回list,mybatis会⾃动转成User的集合类型)
4        ${value}:对于字符串拼接中的占位符,必须⽤value
5        #{ss}:普通占位符,ss和任意取
6      -->
7    <select id="findUserByUsername" parameterType="String" resultType="batis.pojo.User">
8        select * from user where username like '%${value}%'
9    </select>
8.2 添加
1//执⾏sql语句
2        User user = new User();
3        user.setUsername("li");
4        user.setBirthday(new Date());
5        user.setAddress("北京");
6        user.setSex("⼥");
7        sqlSession.insert("test.insertUser", user);
8        sqlSessionmit();
通过调⽤insert⽅法进⾏插⼊操作,注意需要进⾏提交操作
1<insert id="insertUser" parameterType="batis.pojo.User">
2
3<!-- selectKey 标签实现主键返回 -->
4<!-- keyColumn:主键对应的表中的哪⼀列 -->
5<!-- keyProperty:主键对应的pojo中的哪⼀个属性 -->
6<!-- order:设置在执⾏insert语句前执⾏查询id的sql,孩纸在执⾏insert语句之后执⾏查询id的sql -->
7<!-- resultType:设置返回的id的类型 -->
8<selectKey keyColumn="id" keyProperty="id" order="AFTER"
9            resultType="int">
10            select last_insert_id()
11</selectKey>
12<!--传⼊的是User类,只要 #{username}中占位符名字与User类中的属性名⼀致,那么Mybatis会⾃动匹配 -->
13        insert into user(username,sex,birthday,address)
14        values(#{username},#{sex},#{birthday},#{address})
15</insert>
8.3 更新
1//执⾏sql语句
2        User user = new User();
3        user.setId(1);
4        user.setUsername("lihhhhh");
5        user.setBirthday(new Date());
6        user.setAddress("北京2");
7        user.setSex("⼥2");
8        sqlSession.update("updateUserById",user);
9        sqlSessionmit();
1<update id="updateUserById"
2    parameterType="batis.pojo.User"
3>
4    update user
5    set username=#{username},sex=#{sex} where id = #{id}
6</update>
8.4 删除
调⽤语句:sqlSession.delete("deleteUserById", 1);
delete user where id = #{x}
mysql配置与安装过程
</delete>
9.Mybatis解决jdbc的问题
  1、数据库连接创建、释放频繁造成系统资源浪费从⽽影响系统性能,如果使⽤数据库连接池可解决此问题。  解决:在l中配置数据连接池,使⽤连接池管理数据库链接。
  2、Sql语句写在代码中造成代码不易维护,实际应⽤sql变化的可能较⼤,sql变动需要改变java代码。
  解决:将Sql语句配置在l⽂件中与java代码分离。
  3、向sql语句传参数⿇烦,因为sql语句的where条件不⼀定,可能多也可能少,占位符需要和参数⼀⼀对应。
  解决:Mybatis⾃动将java对象映射⾄sql语句,通过statement中的parameterType定义输⼊参数的类型。
  4、对结果集解析⿇烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析⽐较⽅便。  解决:Mybatis⾃动将sql执⾏结果映射⾄java对象,通过statement中的resultType定义输出结果的类型。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。