标签:static price 运行 方法 自动 _id prepare eclipse turn
一:什么是mybatis?
1. Mybatis是一个持久层的框架,是apache下的顶级项目,mybatis托管到goolecode,再后来托管到github下
2. Mybatis让程序员的精力放在sql上,通过mybatis的映射方式,自由灵活的(半自动化,大部分需要程序员编写sql)生成满足需要的sql语句
3. Mybatis可以将preparedStatement中的输入参数进行输入映射,将查询结果集灵活映射为Java对象()
二:mybatis框架
SqlMapConfig.xml(mybatis的全局配置文件,),配置数据源,事务等mybatis运行环境,配置映射文件(配置sql语句)。Mapper.xml(映射文件)
2.SqlSessionFactory(会话工广),作用,创建SqlSession,根据配置文件创建工厂
3SqlSession(会话),是一个面向用户(程序员)的接口,作用:操作数据库(发出sql增,删,改,查)
4.Executor(执行器),是一个接口(基本执行器,缓存执行器),作用:sqlSession内部通过执行器操作数据库
5.Mapped Statement(底层封装对象)作用:对操作数据库存储封装,包括SQL语句,输入参数(输入参数类型:Java简单类型,hashmap,pojo自定义),输出结果类型(输出参数类型:Java简单类型,hashmap,pojo自定义)
三入门程序
环境
1.Java环境:jdk1.7.0_72
Eclipse:indigo
Mysql:5.1
2.Mybatis运行环境(jar包)从https://github.com/mybatis/mybatis-3/releases下载3.2.7版本
Lib下
Mybatis-3.2.7.jar:核心包
加入mysql的驱动包
Mybatis-3.2.7.pdf操作指南
3.log4j.properties
四:语法记录
1. 映射文件的命名方式:User.xml(原始ibatis命名),mapper代理开发映射文件名称叫xxxMapper.xml,比如:UserMapper.xml,ItemsMapper.xml
2. 在映射文件中配置sql语句
3. User.xml配置文件中,namespace命名空间。作用是sql语句进行分类化管理,理解sql隔离。注意:使用mapper代理方法开发,namespace有特殊的重要作用
4. 在映射文件中可以配置很多sql语句
5. 通过select执行数据库查询,id:标识映射文件的sql语句的名称,称为statement的id,将sql语句封装到mappedStatemen对象中
6. #{}表示一个占位符#{id}:其中的id表示接入输入的参数,参数名称是id,类型可以是简单类型,pojo(自定义类型),hashmap。如果输入参数是简单类型,#{}中的参数名可以是value或是其他。#{}接收pojo对象值,通过OGNL读取对象中的属性值。
7. ${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。${}接收的输入参数,类型可以是简单类型,pojo,hashmap,如果是简单类型,${}中只能写value。
8. resultType:指定sql输出结果所映射的Java对象类型,select指定resultType表示将单条记录映射到Java对象
9. 创建SqlSession的过程
(1) mybatis配置文件
(2) 得到配置文件流
(3) 创建会话工厂,传入mybatis的配置文件信息
(4) 通过工厂得到SqlSession
(5) 通过SqlSession操作数据库
package com.xxq.utils;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisSessionFactory
{
public static final SqlSessionFactory SQL_SESSION_FACTORY;
static { //调用log4j org.apache.ibatis.logging.LogFactory.useLog4JLogging();
String config="mybatis-config.xml";
Reader reader=null;
try{ reader=Resources.getResourceAsReader(config);
}catch(Exception e){ e.printStackTrace(); }
SQL_SESSION_FACTORY=new SqlSessionFactoryBuilder().build(reader); }
//返回Session对象 public static SqlSession getSession(){
return SQL_SESSION_FACTORY.openSession();
}
}
五:自增主键的返回
<insert id="insert" parameterType="com.supermi.entity.Shop" >
<!—将插入数据的主键返回,返回到Shop对象中
SELECT LAST_INSERT_ID():得到刚刚insert进去记录的主键的值,只适用于自增主键(此时插入记录时,主键可以不写)
KeyProperty:将查询主键设置到parameterType指定对象(Shop)的那个属性(例如sId)
Order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说,它的执行顺序
resultType:指定 SELECT LAST_INSERT_ID()的结果类型
-->
<selectKey KeyProperty="id" order=”AFTER” resultType=”java.lang.Integer”>
SELECT LAST_INSERT_ID()
</selectKey>
insert into shop (s_name, s_price,s_amount, img_url, st_id, s_info) values (#{sName,jdbcType=VARCHAR}, #{sPrice,jdbcType=DOUBLE},#{sAmount,jdbcType=INTEGER},#{imgUrl,jdbcType=VARCHAR},#{stId,jdbcType=INTEGER},#{sInfo,jdbcType=VARCHAR})
</insert>
六:非自增主键的返回
<insert id="insert" parameterType="com.supermi.entity.Shop" >
<!—
将插入数据的主键返回,返回到Shop对象中
执行过程:首先通过uuid()得到主键,将主键设置到Shop对象的id属性中,其次在insert执行时,从user对象中取出id属性值(前提条件是id字段必须出现在sql语句中)
-->
<selectKey KeyProperty="id" order=”BEFORE” resultType=”java.lang.String”>(返回值类型必须是String类型,Shop.java中也要改为String类型)
SELECT uuid()
</selectKey>
insert into shop (s_id,s_name, s_price,s_amount, img_url, st_id, s_info) values (#{sId,jdbcType=VARCHAR},#{sName,jdbcType=VARCHAR}, #{sPrice,jdbcType=DOUBLE},#{sAmount,jdbcType=INTEGER},#{imgUrl,jdbcType=VARCHAR},#{stId,jdbcType=INTEGER},#{sInfo,jdbcType=VARCHAR})
</insert>
标签:static price 运行 方法 自动 _id prepare eclipse turn
原文地址:http://www.cnblogs.com/xuxueqing/p/7391151.html