mybatis的mybatis的动态sql(一).md
动态sql: sql的内容是变化的,可以根据条件获取到不同的sql语句。主要是where部分发生变化。
一、动态sql的实现 使用的是mybatis提供的标签, <if> ,<where>,<foreach>
二、定义sql的代码片段 就是复用一些语法,步骤: 1.先定义 :
123<sql id="自定义名称唯一"> sql语句, 表名,字段等</sql>
2.再使用
1<include refid="id的值" />
三、if <if>是判断条件的,语法:
123<if test="判断java对象的属性值"> 部分sql语句</if>
3.1 例子接口:
12/* 使用if动态sql */ List<Student> selectStudentIF(Student stu);
xml中:
12345678910111213141516171819202122<!-- 定义sql的代码片段 ...
mybatis的resultType属性的值
resultType: 执行 sql 得到 ResultSet结果集 ,把结果集转换为想要设置的指定类型时使用。使用类型的完全限定名或别名,注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。
它的值可以是:类的全限定名称如:
12345<!-- 系统类 -->resultType="java.lang.Integer"<!-- 自定义类 -->resultType="com.apps.bean.Student"
也可以是别名
12<!-- 系统类 -->resultType="integer"
注意我这里没有写自定义类的别名,对于自定义类我们要自定义别名:在我们mybatis-config.xml的主xml文件中写,注意不是 mapper 文件中
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748<?xml version="1.0&qu ...
mybatis中的模糊like
模糊查询的实现有两种方式, 一是 java 代码中给查询数据加上“%” ; 二是在 mapper 文件 sql 语句的条件位置加上“%”
需求:查询姓名有“帅”的
例1:java代码中提供要查询的 “%帅%”12345678910111213141516//接口方法:List<Student> selectLikeFirst(String name);//mapper 文件:<select id="selectLikeFirst" resultType="com.bjpowernode.domain.Student"> select id,name,email,age from student where name like #{studentName}</select>//测试方法:@Testpublic void testSelectLikeOne(){ String name="%帅%"; List<Student> stuList = st ...
mybatis中的#和$
在mapper文件中,我们传参时可以看到一直在使用 #{ } ,它是什么?跟 ${ } 有什么区别?现在讲解记录。
#:占位符告诉 mybatis 使用实际的参数值代替。并使用 PrepareStatement 对象执行 sql 语句, #{…}代替sql 语句的“?”。这样做更安全,更迅速,通常也是首选做法,
转为 MyBatis 的执行是:
1234String sql=” select id,name,email,age from student where id=?”;PreparedStatement ps = conn.prepareStatement(sql);// 参数1代表第一个?,1005代表?的值ps.setInt(1,1005);
解释:where id=? 就是 where id=#{studentId}ps.setInt(1,1005) , 1005 会替换掉 #{studentId}
$: 字符串替换告诉 mybatis 使用 $ 包含的“字符串”替换所在位置。使用 Statement 把 sql 语句和 ${} 的内容连接起来。主要用在替换表名,列名,不 ...
mybatis解决java类属性名和数据库列名不一样的问题
一、第二种设置返回的结果类型除了resultType通过填写全限定名称来指定返回类型,我们也可以使用resultMap它来指定返回类型,它可以指定列名的值设值给指定的java属性
123456789101112131415161718192021222324252627282930313233343536373839404142<!-- 在xml的mapper文件中 --><!-- 使用resultMap 1. 定义resultMap 2. 在select标签,使用resultMap来引用id定义的名称 --> <!-- 定义resultMap id:自定义名称,表示你定义的这个resultMap type:java类型的全限定名称 --> <resultMap id="studentMap" type="com.apps.bean.Student" > <!-- 列名和java属性的关属 --> & ...
mybatis传入参数(二)
一、传入参数1.3 使用java对象作为方法参数语法 #{属性名},使用java对象的属性值,作为参数实际值
123456789101112131415161718192021222324252627282930313233//使用java对象作为接口方法的参数List<Student> selectMultiObject(OueryParam param);//中间的步骤和第一个案例一样,获取SqlSession对象调用访求方法,获取接口实现类,调用指定方法 //参数 OueryParam op = new OueryParam(); op.setParamName("张德帅"); op.setParamAge(18); //调用studentDao的方法,执行数据库的操作 List<Student> students = mapper.selectMultiObject(op);<!-- 使用java对象的属性值,作为参数实际值 使用对象语法:#{属性名,javaType=类型名称,jdbc ...
mybatis传入参数(一)
一、传入参数从java代码中把数据传入到mapper文件的sql语句中,上个文章我们讲过,mybatis可以动态生成dao接口的实现类。那么我们在调用这个实现类的方法时,一定会有方法要传参使用,mybatis对于传参也有操作,下面将举例:
1.1 一个简单类型的参数简单类型: mybatis把java的基本数据类型和String都叫简单类型。在mapper文件获取简单类型的一个参数的值,使用 #{任意字符}如:
12345678910111213141516171819202122//接口:Student selectStudent(int i);//通过SqlSession对象的getMapper()方法,获得接口的实现类StudentDao studentDao= sqlSession.getMapper(StudentDao.class);// 注:StudentDao.class为接口的类对象//调用studentDao的方法,执行数据库的操作 Student selectStudent = studentDao.selectStudent(1001);//这时将会使用ma ...
mybatis动态代理
一、动态代理 使用SqlSession.getMapper(dao接口.class) 获取这个dao接口的对象,不要自己写实现了
回顾没有动态代理的代码: StudentDao–Dao层的接口
123456789public interface StudentDao { //查询student表的所有的教据 List<Student> selectStudent(); //插入方法 int insertStudent(Student student);}
StudentDaoImpl–Dao层的接口的实现类
1234567891011121314151617181920212223242526272829303132public class StudentDaoImpl implements StudentDao { @Override public List<Student> selectStudent() { // 使用工具类获取SqlSession对象 ...
mybatis主要类的介绍
类的介绍1. Resources类 Resources 类为从类路径中加载资源,提供了易于使用的方法。
String resource = “mybatis-config.xml”;
InputStream in = Resources.getResourceAsStream(resource );
2. SqlSessionFactoryBuilder 类 SqlSessionFactoryBuilder这个类的作用就是为了创建SqlSessionFactory的,一旦SqlSessionFactory创建完毕,
SqlSessionFactoryBuilder就没有存在的价值了,就应该被销毁。所以SqlSessionFactoryBuilder最好的作用域
就是方法体内(及作为一个本地方法变量),用完即销毁。生命周期也就是调用方法的开始到结束。
创建SqlSessionFactory对象
SqlSessionFactoryBuilder builder = new SqlSessionFa ...
mybatis学习前的一些了解
在学习mybatis前,先了解三层架构
一、三层架构① 界面层: 和用户打交道的, 接收用户的请求参数, 显示处理结果的;(jsp ,html ,servlet)
② 业务逻辑层: 接收了界面层传递的数据,计算逻辑,调用数据库,获取数据;
③ 数据访问层: 就是访问数据库, 执行对数据的查询,修改,删除等等的。
三层对应的包 界面层: controller包 (servlet) 业务逻辑层: service 包(XXXService类) 数据访问层: dao包(XXXDao类) 三层中类的交互 用户使用界面层–> 业务逻辑层—>数据访问层(持久层)–>数据库(mysql) 三层对应的处理框架 界面层—servlet—springmvc(框架) 业务逻辑层—service类–spring(框架) 数据访问层—dao类–mybatis(框架)
二、框架所有房子都有一个骨架,但是我们建房子的时候都要重新建立一遍骨架,然后再填砖,那么如果有现成的骨架了,只填砖是 ...