MyBatis的基础知识and(增,删,改,多条件(模糊)查)的demo
来源:互联网 发布:大数据关键技术图谱 编辑:程序博客网 时间:2024/06/03 07:44
基础知识:
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
第一步创建核心配置文件
第二步创建数据库表对应的实体类
第三步创建Mapper配置文件,再加入核心配置文件
第四步加载核心配置文件,创建SqlSessionFactory,使用工厂产生SqlSession
第五步使用MyBatis的各种方法完成增删查改操作
* 在MyBatis中执行事务的方式(执行完毕某个操作成功后以后不进行数据回滚)
* 第一种方式:直接在openSession方法中添加参数true,自动提交的方式
* 第二种方式:在完成整个逻辑操作后,添加代码session.commit();,完成事务的手动提交
1、 mybatis配置
SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的Java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
输出映射(返回的结果集可以有哪些类型)
1)基本类型
2)pojo类型
3)List类型
动态sql:动态的拼接sql语句,因为sql中where条件有可能多也有可能少
1)where:可以自动添加where关键字,还可以去掉第一个条件的and关键字
2)if:判断传入的参数是否为空
3)foreach:循环遍历传入的集合参数
4)sql:封装查询条件,以达到重用的目的
对单个对象的映射关系:
1)自动关联(偷懒的办法):可以自定义一个大而全的pojo类,然后自动映射其实是根据数据库总的字段名称和
pojo中的属性名称对应.
2)手动关联:需要指定数据库中表的字段名称和java的pojo类中的属性名称的对应关系.
使用association标签
对集合对象的映射关系
只能使用手动映射:指定表中字段名称和pojo中属性名称的对应关系
使用collection标签
spring和mybatis整合
整合后会话工厂都归spring管理
1)原生Dao实现:
需要在spring配置文件中指定dao实现类
dao实现类需要继承SqlSessionDaoSupport超类
在dao实现类中不要手动关闭会话,不要自己提交事务.
2)Mapper接口代理实现:
在spring配置文件中可以使用包扫描的方式,一次性的将所有mapper加载
逆向工程:自动生成Pojo类,还可以自动生成Mapper接口和映射文件
注意:生成的方式是追加而不是覆盖,所以不可以重复生成,重复生成的文件有问题.
如果想重复生成将原来生成的文件删除
具体代码:
结果:
架构、
首先 我们先导jar包
pom.xml中的
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.happy</groupId> <artifactId>MyBatis03</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>MyBatis03 Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.31</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>javaee</groupId> <artifactId>javaee-api</artifactId> <version>5</version> </dependency></dependencies> <build> <finalName>MyBatis03</finalName> </build></project>
然后我们该弄大配置了
MyBatis-config.xml
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <properties resource="jdbc.properties"></properties> <settings> <setting name="autoMappingBehavior" value="PARTIAL"/> </settings><typeAliases><!-- <typeAlias type="cn.happy.entity.UserInfo" alias="userinfo"></typeAlias>--><package name="cn.happy.entity"></package></typeAliases> <!--环境--> <environments default="development"> <environment id="development"> <!--事务处理setAutoCommmit(false)--> <transactionManager type="JDBC" /> <!--数据源 DBCP C3P0 POOLED UNPOOLED JNDI(jsp JAVA Naming and Dirtory Interface JAva命名和目录接口) --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="userinfo.xml"></mapper> </mappers></configuration>这里我们引用jdbc.propertiesjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/empdbjdbc.username=rootjdbc.password=这个是里面写SQL 的xml文件ider需要放resource中<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="cn.happy.dao"> <resultMap id="userMap" type="UserInfo"> <result column="name" property="name"></result> </resultMap> <select id="selectAll" resultMap="userMap"> select * from department </select></mapper>实体类测试类关于添加,修改,删除 多条件查询的 所有测试类中代码
@Test //使用session.getMapper()执行 SQL //添加 public void insertOne()throws Exception{ String resource="mybatis-config.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); //获得会话工厂 SqlSessionFactory sf=new SqlSessionFactoryBuilder().build(inputStream); //会话 SqlSession session=sf.openSession(); //Class<T> 和Class 的区别 //动态代理 //构建接口的实现类 IUserInfoDao userinfoDAOImpl=session.getMapper(IUserInfoDao.class); int count=userinfoDAOImpl.insertInfo(new UserInfo("wqueiiuower")); session.commit(); System.out.println(count); session.close(); }@Test //使用session.getMapper()执行 SQL //查询单个 public void selectOneMapper()throws Exception{ String resource="mybatis-config.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); //获得会话工厂 SqlSessionFactory sf=new SqlSessionFactoryBuilder().build(inputStream); //会话 SqlSession session=sf.openSession(); //Class<T> 和Class 的区别 //动态代理 //构建接口的实现类 IUserInfoDao userinfoDAOImpl=session.getMapper(IUserInfoDao.class); UserInfo userInfo=userinfoDAOImpl.selectOneUserInfo(1); System.out.println(userInfo.getName()); session.close(); }//修改 @Test //使用session.getMapper()执行 SQL //添加 public void updateOne1()throws Exception{ String resource="mybatis-config.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); //获得会话工厂 SqlSessionFactory sf=new SqlSessionFactoryBuilder().build(inputStream); //会话 SqlSession session=sf.openSession(); //Class<T> 和Class 的区别 //动态代理 //构建接口的实现类 IUserInfoDao userinfoDAOImpl=session.getMapper(IUserInfoDao.class); int count=userinfoDAOImpl.updateInfo(8,"苏苏最美"); session.commit(); System.out.println(count); session.close(); }@Test//删除 public void delsele()throws Exception{ String resource="mybatis-config.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); //获得会话工厂 SqlSessionFactory sf=new SqlSessionFactoryBuilder().build(inputStream); //会话 SqlSession session=sf.openSession(); IUserInfoDao uoDAOImpl=session.getMapper(IUserInfoDao.class); int count=uoDAOImpl.delInfo(9); System.out.println(count); session.commit(); }SQL映射文件中的 具体SQL语句<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="cn.happy.dao.IUserInfoDao"> <sql id="columns"> id,name </sql> <resultMap id="userMap" type="UserInfo"> <result column="name" property="name"></result> </resultMap> <select id="selectAll" resultMap="userMap"> select * from department </select> <!--????????--> <select id="selectOneUserInfo" resultType="UserInfo"> select <include refid="columns"></include> from department where id=#{id} </select> <!--??????--> <insert id="insertInfo" > insert into department(name) values(#{name}) </insert> <!--??--> <update id="updateInfo" > update department set name=#{name} where id=#{id} </update><!--????--> <select id="selectPart" resultType="UserInfo"> select <include refid="columns"></include> from department where 1=1 <if test="name!=null"> and name=#{name} </if> </select> <!--????--> <select id="selectUserInfo" resultType="UserInfo"> <!-- select * from department where name like '%' #{name} '%'--> select * from department where name like '%${name}%' <!--select <include refid="columns"></include> from department where name like concat('%',#{uname},'%')--> </select> <delete id="delInfo"> DELETE from department where id=#{id} </delete></mapper>接口名与对应的 SQL映射文件中的id必须保持一致
- MyBatis的基础知识and(增,删,改,多条件(模糊)查)的demo
- mybatis多条件的模糊查询解决方案
- 简单的MyBatis demo之数据库增删改查
- 简单的MyBatis demo之数据库增删改查
- mybatis的增删查改(CRUD)
- 数据库基础知识(增、删、改、查)
- mybatis的增删查改
- mybatis的增删查改
- Mybatis的增删改查
- mybatis的 增删改查
- mybatis的增删改查
- Mybatis 用户信息UserInfoMapper.xml的配置(包括增、删、改、查功能的实现)
- mybatis增、删、改、查
- mybatis学习教程(二)初级的增、删、查、改
- MyBatis的基本增删改查及条件操作及main方法调用
- Joomla(6)增、删、改、查简易Demo
- mysql数据库的增、删、改、查(二)---查
- Mybatis学习(3)实现数据的增删改查
- codevs5037 分块
- sizeof总结
- 数字(number)
- sublime text3下python3的配置
- 关于QP
- MyBatis的基础知识and(增,删,改,多条件(模糊)查)的demo
- Html5——jQuery——插件库
- docker commit命令-提交一个新的image
- jetty环境下debug进入的是class而非java文件,按ctrl没有效果
- 利用excel工具类导出文件的用法(包含实例)
- Ubuntu下有关显存的命令
- Millionaire
- Hadoop YARN配置参数剖析(1)—RM与NM相关参数
- greenplum segment down 实例