标签:实参 持久层框架 别名 org http cto drive 开发 dtd
简单地梳理下MyBatis相关的知识点,主要想让自己重新捡起以前学的框架,如果能给广大程序猿朋友有所帮助那就更好了。有疏漏的地方也欢迎大家评论指出。闲言少叙,进入正题。。。。。。。
MyBatis知识梳理
简介(百度,随便看看)
MyBatis体系结构中的几个关键部分
MyBatis的配置文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 6 7 <configuration> 8 <!-- 全局别名,之后映射文件引用可以使用PersonEntity代替com.maven.mybatis.entity.PersonEntity--> 9 <typeAliases> 10 <typeAlias type="com.maven.mybatis.entity.PersonEntity" alias="PersonEntity"/> 11 </typeAliases> 12 13 <environments default="development"> 14 <environment id="development"> 15 <transactionManager type="JDBC"/> 16 <dataSource type="POOLED"> 17 <property name="driver" value="com.mysql.jdbc.Driver"/> 18 <property name="url" value="jdbc:mysql://localhost:3306/test"/> 19 <property name="username" value="root"/> 20 <property name="password" value=""/> 21 </dataSource> 22 </environment> 23 </environments> 24 <!-- 指定映射定义文件 --> 25 <mappers> 26 <mapper resource="com/maven/mybatis/mapper/PersonEntityMapper.xml"/> 27 </mappers> 28 29 </configuration>
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <mapper namespace="com.maven.mybatis.mapper.PersonEntityMapper"> 7 <select id="queryAll" resultType="PersonEntity"> 8 select * from t_person 9 </select> 10 11 <insert id="insert" parameterType="PersonEntity"> 12 insert into t_person(id, name) values(#{id}, #{name}) 13 </insert> 14 15 </mapper>
MyBatis框架主要API简介
MyBatis基本应用
String conf = "SqlMapConfig.xml"; InputStream in = Resources.getResourceAsStream(resource); //创建SqlSessionFactoryBuilder对象 SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder(); //通过SessionFactoryBuilder对象获取SqlSessionFactory SqlSessionFactory sf = sfb.build(in); //创建Session SqlSession session = sf.openSession();
<!--parameterType因为前面定义过Alias所以不需要写包名,否则要写全包名加类名--> <insert id="insert" parameterType="PersonEntity"> insert into t_person(id, name) values(#{id}, #{name}) </insert>
id属性:用于表示映射文件的sql,可以理解为MappedStatement的id
#{}:标识一个占位符
parameterType:指定输入参数的类型
#{name}:其中name表示输入的参数,参数名为name;如果输入参数为简单类型,#{}中参数可以任意。
Java代码
//NAMESPACE为SqlMapper.xml文件根标签的namespace属性 SqlSession session = sf.openSession();
//第一个参数:指映射文件的id值:namespace.id
//第二个参数:指映射文件中匹配parameterType类型的实参 session.insert(NAMESPACE + ".insert", person); session.commit(); session.close();
<insert id="insert" parameterType="PersonEntity"> <!--查询后将自增主键返回到实体对象-->
<selectKey keyProperty="id" order="AFTER" resultType="int"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO t_person(name) VALUES(#{name}) </insert>
keyProperty属性:配置返回user对象的属性名
order属性:配置相对于insert语句执行前或执行后
resultType:指定结果类型
<insert id="insert" parameterType="PersonEntity"> <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> SELECT REPLACE(UUID(),‘-‘,‘‘) </selectKey> INSERT INTO t_person(id, name) VALUES(#{id},#{name}) </insert>
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> SELECT 序列名.nextVal() </selectKey>
<update id="update" parameterType="PersonEntity"> update t_person set name=#{name} where id=#{id} </update >
SqlSession session = sf.openSession(); session.update(NAMESPACE + ".update", person); session.commit(); session.close();
删除操作
SqlMap.xml定义<delete id="delete" parameterType="int"> delete from t_person where id=#{id} </select>
SqlSession session = sf.openSession();
session.delete(NAMESPACE + ".delete", 100);
session.commit();
session.close();
<!--查询单行记录--> <select id="queryById" parameterType="int" resultType="PersonEntity"> select * from t_person </select> <!--查询多行记录--> <select id="queryAll" resultType="PersonEntity"> select * from t_person </select> <!--查询返回Map类型查询结果--> <select id="queryPerson" parameterType="int" resultType="java.util.HashMap"> select id, name from t_person where id=#{id} </select>
SqlSession session = sf.openSession(); /* //查询单行记录 PersonEntity person = (PersonEntity)session.selectOne(NAMESPACE + ".queryById", 100); //返回Map查询结果 Map map = (Map)session.selectOne("queryPerson", 100); */ //查询多行记录 List<PersonEntity> personList = session.selectList(NAMESPACE + ".queryAll"); session.commit(); session.close();
SqlSession session = sqlSessionFactory.openSession(); PersonMapper mapper = session.getMapper(PersonEntity.class); session.close();
PersonMapper接口定义:
public interface PersonMapper{ public List<PersonEntity> queryAll(); public PersonEntity queryById(int id); public void insert(Person person); public void update(Person person); public void delete(int id); //!提示:Mapper接口中的方法名要和SqlMap.xml中的SQL的id保持一致 }
遵循如下规范,MyBatis会自动给我们创建实现该接口的代理对象
- 在mapper.xml的namespace属性值必须是mapper接口的全路径
- mapper接口中的方法名必须和mapper.xml文件中的id值相同
- mapper接口中的输入参数类型必须和mapper.xml中statement中的parameterType类型相同
- mapper接口中的方法的返回值类型和mapper.xml中statement中的resultType的类型相同
<select id="queryAll1" resultMap="personMap"> select id, name from t_person </select> <resultMap id="personMap" type="PersonEntity"> <result property="no" column="id" /> <result property="username" column="name" /> </resultMap>
未完,待续。。。。。。
标签:实参 持久层框架 别名 org http cto drive 开发 dtd
原文地址:http://www.cnblogs.com/konrad/p/6376197.html