mybatis学习(一)不使用 XML 构建 SqlSessionFactory
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
配置mybatis-config.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> <!-- 别名
.类型别名 typeAlias type属性值为全类名 alias为别名
.根据包 name属性值为包名 别名为包内类名的小写
-->
<typeAliases>
<!-- <typeAlias type="com.tzh.bean.Clazz" alias="clazz"/>
<typeAlias type="com.tzh.bean.Student" alias="student"/> -->
<package name="com.tzh.bean"/>
</typeAliases> <environments default="default">
<environment id="default">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql:///1606a" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="com/tzh/mapper/*.xml" />
</mappers> </configuration>
创建beanSession工厂
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
package com.tzh.test; 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; public class SqlSessionUtils { public static SqlSession getSqlSession() {
SqlSession sqlSession = null;
try {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); sqlSession = sqlSessionFactory.openSession();
} catch (Exception e) {
e.printStackTrace();
}
return sqlSession;
}
创建mapper接口
package com.tzh.mapper;
import java.util.List;
import com.tzh.bean.Student;
public interface StuMapperDao {
List<Student> getStuList(Student student);
List<Student> getStuListChoose(Student student);
int updateStu(Student student);
int addStu(List<Student> stuList );
int delStu(int [] arr);
}
sql语句
<?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">
<!-- namespace 对应的是接口的全名 -->
<mapper namespace="namespace">
<!-- student为别名 在核心配置文件设置 -->
<select id="getStuList" resultType="student" parameterType="student"> select * from 0802_stu
<!-- where = -->
<!-- 如果内部的判断条件成立,会自动加上where关键字,并且会把多余的and或者or去掉 -->
<where>
<if test="sname !=null and sname!='' ">
and sname like concat('%',#{sname},'%')
</if> <if test="sex!=null and sex!=''">
and sex =#{sex}
</if>
<if test="age >0 ">
and age < #{age}
</if>
</where>
</select>
<select id="getStuListChoose" resultType="student"
parameterType="student"> select * from 0802_stu
<!-- where = -->
<!-- 如果内部的判断条件成立,会自动加上where关键字,并且会把多余的and或者or去掉 -->
<!-- <where> -->
<trim prefix="where" prefixOverrides="and |or ">
<!-- 条件成立在前面加上WHER关键词 并 prefixOverrides前缀覆盖 条件成立去挑前缀add|or--> <!-- choose when otherwise 用法和switch case break 类似 只运行一个条件都符合时运行第一个 -->
<choose>
<when test="sname !=null and sname!='' ">
and sname like concat('%',#{sname},'%')
</when>
<when test="sex!=null and sex!=''">
and sex =#{sex}
</when>
<otherwise><!-- 其他相当于else -->
and age < #{age}
</otherwise>
</choose>
</trim>
<!-- </where> -->
</select> <update id="updateStu" parameterType="student">
update 0802_stu
<!-- SET 在内部的条件成立,就会加上set关键字,并且会把多余的逗号去掉 -->
<!-- <set> -->
<trim prefix="set" suffixOverrides=",">
<!-- suffixOverrides 去掉多余的 , -->
<if test="sname != null and sname !=''">
sname = #{sname},
</if>
<if test="sex !=null and sex != ''">
sex = #{sex},
</if>
<if test="age>0">
age = #{age}
</if>
</trim>
<!-- </set> -->
where sid= #{sid}
</update> <insert id="addStu" parameterType="list">
INSERT into 0802_stu (sname,sex,age,cid) VALUES
<!-- 你可以传递一个 List 实例或者数组作为参数对象传给 MyBatis。
当你这么做的时 候,MyBatis 会自动将它包装在一个 Map 中,用名称在作为键。
List 实例将会以“list” 作为键,而数组实例将会以“array”作为键。 -->
<foreach collection="list" item="stu" separator=",">
(#{stu.sname},#{stu.sex},#{stu.age},#{stu.cid})
</foreach> <!-- ('隆多','男',,),
('隆多','男',,),
('隆多','男',,),
('隆多','男',,),
('隆多','男',,),
('隆多','男',,) --> </insert> <delete id="delStu" parameterType="java.lang.reflect.Array">
DELETE FROM 0802_stu WHERE sid in
<foreach collection="array" item="sid" open="(" separator="," close=")" >
#{sid}
</foreach>
</delete> </mapper>
测试
package com.tzh.test; import java.util.ArrayList;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import com.tzh.bean.Student;
import com.tzh.mapper.StuMapperDao; public class TestDemo { @Test
public void testListLike() { SqlSession sqlSession = SqlSessionUtils.getSqlSession();
StuMapperDao mapper = sqlSession.getMapper(StuMapperDao.class);
Student student = new Student();
student.setSname("k");
student.setSex("男");
student.setAge(); //List<Student> stuList = mapper.getStuList(student);
List<Student> stuList = mapper.getStuListChoose(student);
for (Student student2 : stuList) {
System.out.println(student2);
} } @Test
public void testUpdate() { SqlSession sqlSession = SqlSessionUtils.getSqlSession();
StuMapperDao mapper = sqlSession.getMapper(StuMapperDao.class);
Student student = new Student();
student.setSname("k");
student.setSex("男");
//student.setAge(34);
student.setSid(); int updateStu = mapper.updateStu(student);
sqlSession.commit();
} @Test
public void testAdd() { SqlSession sqlSession = SqlSessionUtils.getSqlSession();
StuMapperDao mapper = sqlSession.getMapper(StuMapperDao.class);
Student student = new Student();
student.setSname("k");
student.setSex("男");
student.setAge();
student.setCid();
Student student1 = new Student();
student1.setSname("k");
student1.setSex("男");
student1.setAge();
student1.setCid();
Student student2 = new Student();
student2.setSname("k");
student2.setSex("男");
student2.setAge();
student2.setCid(); List<Student> stuList = new ArrayList<Student>(); stuList.add(student);
stuList.add(student1);
stuList.add(student2); int addStu = mapper.addStu(stuList); sqlSession.commit(); } @Test
public void testDel() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
StuMapperDao mapper = sqlSession.getMapper(StuMapperDao.class); int [] arr = {,,,,}; int delStu = mapper.delStu(arr);
sqlSession.commit();
} }
mybatis学习(一)不使用 XML 构建 SqlSessionFactory的更多相关文章
- mybatis源码探索笔记-1(构建SqlSessionFactory)
前言 mybatis是目前进行java开发 dao层较为流行的框架,其较为轻量级的特性,避免了类似hibernate的重量级封装.同时将sql的查询与与实现分离,实现了sql的解耦.学习成本较hibe ...
- mybatis学习记录三——SqlMapConfig.xml相关参数详解
5 SqlMapConfig.xml mybatis的全局配置文件SqlMapConfig.xml,配置内容如下: properties(属性) settings(全局配置参数) ty ...
- Mybatis学习(三)XML配置文件之mybatis-config.xml
1.MyBatis的配置文件结构 1.1 properties 这些是外部化的,可替代的属性,这些属性也可以配置在典型的 Java 属性配置文件中,或者通过 properties 元素的子元素来传递. ...
- Mybatis学习(二)常用对象SqlSessionFactory和SqlSession
1.SqlSessionFactory SqlSeesionFactory对象是MyBatis的关键对象,它是一个数据库映射关系经过编译后的内存镜像. SqlSeesionFactory对象的实例可以 ...
- mybatis学习一:基于xml与注解配置入门实例与问题
注:本case参考自:http://www.cnblogs.com/ysocean/p/7277545.html 一:Mybatis的介绍: MyBatis 本是apache的一个开源项目iBatis ...
- Mybatis学习笔记(五) —— Mapper.xml(输入映射和输出映射)
一.parameterType(输入类型) 1.1 传递简单类型 <!-- 根据用户id查询用户 --> <select id="queryUserById" p ...
- MyBatis学习笔记3--使用XML配置SQL映射器
<resultMap type="Student" id="StudentResult"> <id property="id&quo ...
- 【MyBatis学习05】SqlMapConfig.xml文件中的配置总结
经过上两篇博文的总结,对mybatis中的dao开发方法和流程基本掌握了,这一节主要来总结一下mybatis中的全局配置文件SqlMapConfig.xml在开发中的一些常用配置,首先看一下该全局配置 ...
- Mybatis学习笔记(四) —— SqlMapConfig.xml配置文件
一.properties(属性) SqlMapConfig.xml可以引用java属性文件中的配置信息 在config下定义db.properties文件,如下所示: db.properties配置文 ...
随机推荐
- git diff 以及解决代码冲突
我是使用一台电脑测试, 然后在本地电脑创建了两个工作目录.专门用来模拟两个人提交代码.假设a.b两个人.只使用一个master分支做测试, 没有建立其他的分支. 主要就是为了研究冲突的解决方式.感觉g ...
- C/C++ - malloc/free和new/delete的区分
new/delete与malloc/free的区别主要表现在以下几个方面: 注意:最主要的区别,new/delete是运算符,而malloc/free是函数 (1).new能够自动计算需要分配的内存空 ...
- angular打包(三):pkg
希望打包成1个web服务,运行exe,启动 angular,供浏览器显示. 问题分析: 其实angular编译后,都是静态文件了.只需要打包express,让express可以以exe的形式运行就可以 ...
- hdu 5723 Abandoned country 最小生成树+子节点统计
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- canvas小实验
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaWeb-SpringSecurity在数据库中查询登陆用户
系列博文 项目已上传至guthub 传送门 JavaWeb-SpringSecurity初认识 传送门 JavaWeb-SpringSecurity在数据库中查询登陆用户 传送门 JavaWeb-Sp ...
- 【知识库】-数据库_MySQL常用SQL语句语法大全示例
简书作者:seay 文章出处: 关系数据库常用SQL语句语法大全 Learn [已经过测试校验] 一.创建数据库 二.创建表 三.删除表 四.清空表 五.修改表 六.SQL查询语句 七.SQL插入语句 ...
- Bzoj3073Journeys
这不裸的dij吗?来,弄他. 打完以后发现不妙,这数据范围略神奇……算一算,考一场都可能跑不出来.map去重边(成功额外引入log)不怕,交.TLE,54. 这不玩呢吗,把map去了,交.MLE,71 ...
- Maximum upload size exceede上传文件大小超出解决
在这里记录三种方法, 努力提高自己的姿势水平 application.yml配置 spring: servlet: multipart: enabled: true max-file-size: 10 ...
- Zookeeper 安装及命令行操作
[参考文章]:[分布式]Zookeeper使用--命令行 [参考文章]:zookeeper的数据模型 [参考文章]:zookeeper ACL使用 1. 安装包下载 官方下载地址 选择一个具体的版本进 ...