Mybatis学习笔记-Mybatis开发demo

  1. 开发步骤
  1. 创建Web项目
  2. 导入jar Mybatis3.2.2

mybatis-3.2.2.jar                      核心驱动

asm-3.3.1.jar

cglib-2.2.2.jar

commons-logging-1.1.1.jar

javassist-3.17.1-GA.jar

log4j-1.2.17.jar

slf4j-api-1.7.5.jar

slf4j-log4j12-1.7.5.jar

mysql-connector-java-5.1.26.jar     数据库驱动

 

  1. 核心配置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>

        <!-- 配置数据源,事务 -->

        <environments default="test">

                 <environment id="test">

                         <!-- 事务:JDBC/MANAGED-自己管理去 -->

                         <transactionManager type="JDBC"/>

                         <!-- 数据源:POOLED/UNPOOLED/JNDI -->

                         <dataSource type="POOLED">

                                  <property name="driver" value="com.mysql.jdbc.Driver"/>

                                  <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb?charsetEncoding=utf8"/>

                                  <property name="username" value="root"/>

                                  <property name="password" value="root"/>

                         </dataSource>

                 </environment>

                 <environment id="deploy">

                         <!-- 事务:JDBC/MANAGED-自己管理去 -->

                         <transactionManager type="JDBC"/>

                         <!-- 数据源:POOLED/UNPOOLED/JNDI -->

                         <dataSource type="POOLED">

                                  <property name="driver" value="com.mysql.jdbc.Driver"/>

                                  <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb?charsetEncoding=utf8"/>

                                  <property name="username" value="root"/>

                                  <property name="password" value="root"/>

                         </dataSource>

                 </environment>

        </environments>

       

        <!-- 映射文件mapper -->

</configuration>

  1. 测试类SqlSessionFactoryBuilder.builer()创建一个SqlSessionFactory

package test;

 

import java.io.IOException;

import java.io.InputStream;

 

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.Test;

 

/**

 * @Description:

 * @Author:            传智播客 java学院       陈子枢

 * @Company:       http://java.itcast.cn

 * @CreateDate:    2014年11月15日

 */

public class TestMybatis {

        @Test

        public void init() throws IOException{

                 String resource = "sqlMapConfig.xml";

                 InputStream is = Resources.getResourceAsStream(resource);

                 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

                 SqlSession session = factory.openSession();

        }

}

  1. 通过SqlSessionFactory获取SqlSession,可以调用CRUD操作。
  2. 创建数据库表

  1. 映射文件mapper

<?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="cn.itcast.mapper.PersonMapper">

        <!-- 查询,注意Mybatis中如果有填写集合类型,只填写集合中元素的类型  -->

        <select id="find" resultType="cn.itcast.domain.Person">

                 select * from person

        </select>

</mapper>

  1. 测试

package test;

 

import java.io.IOException;

import java.io.InputStream;

import java.util.List;

 

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.Test;

 

import cn.itcast.domain.Person;

 

/**

 * @Description:

 * @Author:            传智播客 java学院       陈子枢

 * @Company:       http://java.itcast.cn

 * @CreateDate:    2014年11月15日

 */

public class TestMybatis {

        @Test

        public void init() throws IOException{

                 String resource = "sqlMapConfig.xml";

                 InputStream is = Resources.getResourceAsStream(resource);

                 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

                 SqlSession session = factory.openSession();

                

                 //如何访问mapper中的方法呢?  规则:命名空间+.+id

                 List<Person> personList = session.selectList("cn.itcast.mapper.PersonMapper.find");

                 System.out.println(personList.size());

                 for(Person p : personList){

                         System.out.println(p);

                 }

        }

}

 

  1. SqlSessionFactory和SqlSession

SqlSessionFactory它是一个线程安全

SqlSession 它是不安全

 

  1. 参数

parameterMap 废除,它是ibatis

parameterType

 

  1. 获取SQL中的参数

#name# ibatis

#{}, ${}    mybatis

 

 

注意selectOne时,结果集必须是一条记录,否则mybatis报错

org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3

   <!-- 查询一个,按id查询 -->

   <select id="get" parameterType="int" resultType="cn.itcast.domain.Person">

      select * from person

   </select>

 

   @Test //查询一条

   public void testGet(){

      SqlSession session = factory.openSession();

      Person p = session.selectOne("cn.itcast.mapper.PersonMapper.get", 1);

      System.out.println(p);

   }

 

 

  1. 当数据库表字段和实体对象属性名称不一致时,怎么处理?

解决办法:

  1. 通过sql的字段命名别名,别名跟实体对象属性一致

select id,user_name as name,age,remark from person

Mybatis它对象映射是通过结果集的字段名称

 

  1. Mybatis最强大功能 resultMap对象

 

 

 

  1. 结果集

resultType        基础类型,int,string,Person

resultMap        针对resultMap标签

 

  1. 获取SqlSessionFactory

   private SqlSessionFactory factory;

  

   @Before   //最先执行,初始化SessionFactory

   public void init() throws IOException{

      String resource = "sqlMapConfig.xml";

      InputStream is = Resources.getResourceAsStream(resource);

      factory = new SqlSessionFactoryBuilder().build(is);

   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值