原理: 具体实现: 动态代理使用mybatis 从Java代码中把数据传入mapper文件sql语句中 简单类型:Java的基础数据类型和String都叫简单类型 在mapper文件获取简单类型的一个参数的值,使用#{任意字符} —>占位符 由mybatis执行下面的代码: Java的属性值就是sql需要的参数值,每一个属性就是一个参数 格式:#{property,JavaType = Java中数据类型名,jdbcType= 数据类型名称} JavaType、jdbcType的类型能够检测出来,一般不需要设置 。常用格式 :#{property} Student.xml文件中select语句的写法: 语法:#{map的key} Student.xml文件中select语句的写法: 1. mybatis.xml部分的代码:文章预览:
1、mybatis的动态代理
返回值为List集合的是select方法
如果返回值是int类型的数据,看mapper文件中的标签是 就会调用相应的方法 用动态代理使用mybatis过程: 1、获取SqlSession接口 2、使用SqlSession的getMapper();方法来在mybatis内部创建StudentDao对象 3、使用这个对象调用方法
2、深入理解参数
1. parameterType:
public student selectstudentById(Interger id)值是java数据类型的全限定名称或者别名(文档p15)<select id="selectStudentById" parameterType="java.lang.Integer"resultType="com.yky.domain.Student"> select id,name,email,age from student where id=#{id} </select>
2. 一个简单类型的参数:
3. mybatis 封装 jdbc
String sql = "select id,name,email,age from student where id = ?"; PreparedStatement pst = conn.prepqredStatement(sql); pat.setInt(1,1001);
ResultSet rs = ps.executeQuery(); Student student = null; while(rs.next){ //从数据库取表的一行数据,存到一个Java对象属性中 student = new Student(); student.setId(); … } return student;
4.多个参数传值
1、命名参数(推荐)
<select id="selectStudentMultiParam" resultType="com.yky.domain.Student"> select id,name,email,age from student where age = #{studentage} or name=#{studentname}<!--占位符中填写你对参数的命名--> </select>
//命名传参,多个参数 List<Student> selectStudentMultiParam(@Param("studentname") String name, @Param("studentage")
2、对象传参
<!--没有省略--> <!--<select id="selectStudentMultiObjdct" resultType="com.yky.domain.Student">--> <!--select id,name,email,age from student where name = #{bakname,javaType = java.lang.String,jdbcType = VARCHAR} or--> <!-- age = #{bakage,javaType = java.lang.Integer,jdbcType = INTEGER}--> <!-- </select>--> <!--省略--> <select id="selectStudentMultiObjdct"resultType="com.yky.domain.Student"> select id,name,email,age from student where name = #{bakname} or age = #{bakage} </select>
这个类就是sql语句传参的类型public class StudentBak { private String bakname; private Integer bakage
//多个参数,使用Java对象 @Test public void selectStudentMurilObject(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); StudnetDao studnetDao = sqlSession.getMapper(StudnetDao.class); StudentBak studentBak = new StudentBak(); studentBak.setBakname("lk"); studentBak.setBakage(18); List<Student> students = studnetDao.selectStudentMultiObjdct(studentBak); students.forEach(student -> System.out.println(student)); }
3、按位置传参
<!--多个参数,按位置传参--> <select id="selectStudentMultiPosition" resultType="com.yky.domain.Student"> select id,name,email,age from student where name =#{arg0} or age = #{arg1}; </select> //多个参数,按位置传参 List<Student> selectStudentMultiPosition(String name,Integer age);
4、Map传参
<!--多个参数,map传参--> <select id="selectStudentMultiByMap"resultType="com.yky.domain.Student"> select id,name,email,age from student where name =#{mapname} or age = #{mapage}; </select> /多个参数,map传参 List<Student> selectStudentMultiByMap(Map<String,Object> map);
测试: //多个参数,map传参 @Test public void selectStudentMurilMap(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); StudnetDao StudentDao = sqlSession.getMapper(StudnetDao.class); Map<String,Object> map = new HashMap<>(); map.put("mapname","lk"); map.put("mapage",18); List<Student> students = StudentDao.selectStudentMultiByMap(map); students.forEach(stu -> System.out.println(stu)); }
5.占位符比较:#和$
3、具体代码实现:
<?xml version="1.0" encoding="UTF-8" ?> <!--约束文件--> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd"> <!--根标签--> <configuration> <!--控制mybatis全局行为--> <settings> <!--打印日志--> <setting name="logImpl" value="STDOUT_LOGGING"></setting> </settings> <!--定义别名: typeAlias :可以指定一个类型一个自定义的别名 1、type:自定义类型的全限定名称 2、alias:别名 --> <typeAliases> <package name="com.mybatis.domain"/> <!-- <typeAlias type="com.mybatis.domain.Student" alias="Student"></typeAlias>--> </typeAliases> <!--环境标签 default:表示使用哪一个环境配置--> <environments default="development"> <!--环境标签中的一个环境配置 id:表示这一个环境配置的唯一标识--> <environment id="development"> <!--JDBC的事务提交--> <transactionManager type="JDBC"/> <!--使用连接池--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/bjpowernode?serverTimezone=UTC&characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="yky"/> </dataSource> </environment> </environments> <!--mysql映射文件的位置 一个mysql映射文件一个mapper--> <mappers> <mapper resource="com/mybatis/Dao/studentDao.xml"/> </mappers> </configuration>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--命名空间: 最好以接口的全限定名称命名--> <mapper namespace="com.mybatis.Dao.StudentDao"> <!--id:唯一标识,推荐调用该语句的方法名 resultType:转换的数据类型,该类型的全限定名称--> <!-- <select id="selectStudent" resultType="com.mybatis.domain.Student">--> <!-- select id,name,email,age from student order by id--> <!-- </select>--> <select id="selectStudentById" resultType="com.mybatis.domain.Student"> select id,name,email,age from student where id = #{studentid} </select> <select id="selectStudentByStudent" resultType="com.mybatis.domain.Student"> select id,name,email,age from student where name = #{name} or id = #{id} </select> <select id="selectStudentByMap" resultType="com.mybatis.domain.Student"> select id,name,email,age from student where age = #{mapage} or id = #{mapid} </select> <select id="selectStudentBy" resultType="com.mybatis.domain.Student"> select id,name,email,age from student where age = #{arg0} or id = #{arg1} </select> <select id="selectStudentBy$" resultType="com.mybatis.domain.Student"> select id,name,email,age from student where age = ${age} </select> <select id="selectStudentBy$2" resultType="Student"> select id,name,email,age from student order by ${age} </select> <!-- <select id="selectCount" resultType="java.lang.Integer">--> <!-- select count(*) from student--> <!-- </select>--> <select id="selectCount" resultType="int"> select count(*) from student </select> <select id="selectMap" resultType="map"> select * from student where id = #{id} </select> </mapper>
为了能够在maven编译后获取到student.xml文件加入: <resources> <resource> <directory>src/main/java</directory><!--所在的目录--> <includes><!--包括目录下的.properties,.xml文件都会被扫描到--> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources>
//使用@param传参,并且没有实现类 @Test public void selectStudentByid() { SqlSession sqlSession = MybatisUtils.getSqlSession(); StudentDao studentDao = sqlSession.getMapper(StudentDao.class); Student student = studentDao.selectStudentById(1001); System.out.println(student); } //多个参数,使用对象传参 @Test public void selectStudentByStudent() { SqlSession sqlSession = MybatisUtils.getSqlSession(); StudentDao studentDao = sqlSession.getMapper(StudentDao.class); Student student1 = new Student(); student1.setName("lk"); student1.setId(1001); List<Student> studentList = studentDao.selectStudentByStudent(student1); studentList.forEach(student -> System.out.println(student)); } //使用map传参 @Test public void selectStudentByMap() { SqlSession sqlSession = MybatisUtils.getSqlSession(); StudentDao studentDao = sqlSession.getMapper(StudentDao.class); Map<String, Object> map = new HashMap<>(); map.put("mapage", 18); map.put("mapid", 1001); List<Student> studentList = studentDao.selectStudentByMap(map); studentList.forEach(student -> System.out.println(student)); } //直接写参数 @Test public void selectStudentBy() { SqlSession sqlSession = MybatisUtils.getSqlSession(); StudentDao studentDao = sqlSession.getMapper(StudentDao.class); List<Student> studentList = studentDao.selectStudentBy(18, 1001); studentList.forEach(student -> System.out.println(student)); } //直接写参数,$拼接字符串 @Test public void selectStudentBy$() { SqlSession sqlSession = MybatisUtils.getSqlSession(); StudentDao studentDao = sqlSession.getMapper(StudentDao.class); List<Student> studentList = studentDao.selectStudentBy$(18); studentList.forEach(student -> System.out.println(student)); } //直接写参数,$代替列名 @Test public void selectStudentByline$() { SqlSession sqlSession = MybatisUtils.getSqlSession(); StudentDao studentDao = sqlSession.getMapper(StudentDao.class); List<Student> studentList = studentDao.selectStudentBy$2("id"); studentList.forEach(student -> System.out.println(student)); }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算