Mybatis基础学习(一)—初识MyBatis

一、MyBatis是什么?

     MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。

     MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

     Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

 

二、基础操作

1.查询操作

(1)数据库准备

 

(2)实体类创建

public class User implements Serializable{

	private int id;

	private String username;// 用户姓名

	private String sex;// 性别

	private Date birthday;// 生日

	private String address;// 地址

	//get、set....
}

 

(3)配置文件创建

User.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">

<!-- 命名空间,分类管理SQL语句 -->
<!-- 注意:在mapper代理时,namespace具有特殊及重要的作用 -->
<mapper namespace="test">

    <!--
       ===============根据ID查询用户信息===============
       select: 表明一个MapppedStatement。
        id: statement的id,要求在命名空间内唯一。
        parameterType: 入参的java类型。
        resultType: 查询出的单条结果集对应的java类型。
        #{ }: 表示一个占位符。
        #{id}: 表明该占位符接受的参数名称为id。注意:如果参数为简单类型#{}里面的参数名称可以是任意定义的。
     -->
    <select id="findUserById" parameterType="int" resultType="com.kiwi.domain.User">
        SELECT * FROM USER WHERE id = #{id}
    </select>

</mapper>

 

SqlMapConfig.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>

    <!-- 配置mybatis的环境信息,与spring整合之后,该部分将由spring管理 -->
    <environments default="development">
        <environment id="development">
            <!-- 配置JDBC事务控制,由mybatis进行管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源,采用dbcp连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>

    <!-- 加载Mapper -->
    <mappers>
        <mapper resource="sqlmap/User.xml"/>
    </mappers>

</configuration>

 

(4)测试类

	@Test
	public void testQuery() throws IOException{

		//1.读取配置文件
		String resource = "SqlMapConfig.xml";
		InputStream is = Resources.getResourceAsStream(resource);

		//2.根据配置文件创建SqlSessionFactory
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = builder.build(is);	

		//3.创建SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();

		/*
		 * 4.SqlSession操作数据,执行增删改查
		 * 第一个参数: statement ID , namespace.statementID
		 * 第二个参数: param
		 */
		User user = sqlSession.selectOne("test.findUserById",1);

		System.out.println(user);

		//5.关闭SqlSession
		sqlSession.close();

	}

结果:

     User [id=1, username=王五, sex=2, birthday=Fri Jul 01 00:00:00 GMT+08:00 2016, address=北京市]

 

(5)根据名字模糊查询

User.xml

     <!--
         根据用户名称模糊查询
         ${}:表示一个拼接符
         ${value}: ${}中的value表示输入参数的参数名称,注意:如果参数为简单类型${}里面的参数名称只能是value
         ${}存在SQL注入的风险,但是特殊情况必须使用${},比如order by 后面必须是${columnName}
     -->
    <select id="findUserByName" parameterType="java.lang.String" resultType="com.kiwi.domain.User">
        SELECT * FROM USER WHERE username LIKE ‘%${value}%‘
    </select>

Test.java

	@Test
	public void testQueryName() throws IOException{

		//1.读取配置文件
		String resource = "SqlMapConfig.xml";
		InputStream is = Resources.getResourceAsStream(resource);

		//2.根据配置文件创建SqlSessionFactory
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = builder.build(is);

		//3.创建SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();

		//4.SqlSession操作数据,执行增删改查
		List<User> list = sqlSession.selectList("test.findUserByName","小明");

		for(User user : list){
			System.out.println(user);
		}

		//5.关闭SqlSession
		sqlSession.close();

	}

结果:

      User [id=16, username=张小明, sex=1, birthday=Wed Jul 06 00:00:00 GMT+08:00 2016, address=吉林市]

      User [id=22, username=陈小明, sex=1, birthday=Wed Jul 13 00:00:00 GMT+08:00 2016, address=吉林市]

      User [id=25, username=陈小明, sex=1, birthday=Fri Jul 01 00:00:00 GMT+08:00 2016, address=长春市]

时间: 2024-11-29 02:36:52

Mybatis基础学习(一)—初识MyBatis的相关文章

Java基础学习——数组初识(1)

Java基础学习--数组初识(1) 1什么是数组 Java中常见的一种数据结构就是数组,数组可以分为一维数组.二维数组和多维数组. 数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元素都可以用一个统一的数组名和下标来确定. 2 数组的使用 数组的一般使用步骤: 声明数组 分配内存给该数组 下面是一维数组为例: 数据类型  数组名 []: 数组名 = new 数据类型 [数据个数]: 2.1一维数组的声明与赋值 1.数组的声明 int  num [];    

Mybatis基础学习(二)&mdash;开发Dao方式

一.原始Dao开发方式 UserDao.java public interface UserDao{ public User findUserByID(Serializable id); public List<User> findUsersByName(String name); } UserDaoImpl.java public class UserDaoImpl implements UserDao{ //SqlSessionFactory是单例存在,不应该在具体实例中创建,需要外部依赖

mybatis基础学习二

操作users表的CRUD XML实现方式 定义sql映射xml文件 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"> <m

Mybatis基础学习(五)&mdash;缓存

一.概述      mybatis提供查询缓存,如果缓存中有数据就不用从数据库中获取,用于减轻数据压力,提高系统性能.           一级缓存是SqlSession级别的缓存.在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据.不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的.      二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可

MyBatis基础学习笔记--摘录

1.MyBatis是什么? MyBatis源自于IBatis,是一个持久层框架,封装了jdbc操作数据库的过程,使得开发者只用关心sql语句,无需关心驱动加载.连接,创建statement,手动设置参数,结果集检索等jdbc底层操作. Mybatis通过xml或注解的方式将要执行的各种statement(statement.preparedStatemnt.CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由myb

Mybatis基础学习(四)&mdash;关系映射

一.模型分析 user和orders user---->orders 一个用户可以创建多个订单,一对多. orders--->user 一个订单只由一个用户创建,一对一.   orders和orderdetail orders--->orderdetail 一个订单可以包括多个订单明细,因为一个订单可以购买多个商品,每个商品的购买信息在orderdetail记录,一对多关系. orderdetail---> orders 一个订单明细只能包括在一个订单中,一对一.   orderd

mybatis基础学习2---(resultType和resultMap的用法和区别)

1:resultType和resultMap两者只能有一个成立 2:resultMap可以解决复杂查询时的映射问题 3:使用 resultType使用 -------------------------------------------------------------------------------------------------- resultMap使用

Mybatis基础学习(三)&mdash;映射文件

一.输入映射 1.parameterType     指定输入参数的Java类,可以使用别名或者类的全限定名.它也可以接受基本数据类型.POJO对象.HashMap.   (1)基本数据类型   (2)POJO对象   (3)传递POJO包装对象     开发中通过pojo传递查询条件 ,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数. UserQueryVo.java public class Use

Mybatis框架学习总结-优化Mybatis配置文件中的配置

连接数据库的配置单独放在一个properties文件中 之前,是直接将数据库的连接配置信息卸载了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-