MyBatis学习总结(一)
来源:互联网 发布:sqlserver backup log 编辑:程序博客网 时间:2024/05/21 11:27
一、什么是Mybatis
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的
JDBC代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口
和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
二、Mybatis框架原理
1.框架图
2.分析结论
2.1 mybatis配置文件,包括Mybatis全局配置文件和Mybatis映射文件,其中全局配置文件配置了数据源、事物处理等信息;
映射文件配置了sql执行相关的信息
2.2 mybatis通过读取配置文件信息,构造出SqlSessionFactory。
2.3 通过SqlSessionFactory可以构建SqlSession,mybatis通过SqlSession操作数据库
2.4 SqlSession本身不能直接操作数据库,是通过底层Executor执行器操作数据库
2.5 Executor执行器要处理的sql信息是封装到一个底层对象MapperStatement中,该对象包括:sql语句、输入参数映射信息、输出结果集映射 信息,其中输入参数和输出结果的映射类型包括java的简单类型、HashMap集合对象、POJO对象类型
三、代码示例
3.1 所需要的jar包
3.2 配置文件
db.properties
db.driver=com.mysql.jdbc.Driverdb.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8db.username=rootdb.password=123456log4j.properties
# Global logging configurationlog4j.rootLogger=DEBUG, stdout# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%nSqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 加载java的配置文件或者声明属性信息 --><properties resource="db.properties"/><!-- 配置mybatis的环境信息 --><environments default="development"><environment id="development"><!-- 配置JDBC事务控制,由mybatis进行管理 --><transactionManager type="JDBC"></transactionManager><!-- 配置数据源,采用mybatis连接池 --><dataSource type="POOLED"><property name="driver" value="${db.driver}"/><property name="url" value="${db.url}" /><property name="username" value="${db.username}" /><property name="password" value="${db.password}" /></dataSource></environment></environments><!-- 加载映射文件 --><mappers ><mapper resource="mapper/UserMapper.xml"/></mappers></configuration>UserMapper.xml
<?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"><mapper namespace="com.wz.mybatis.mapper.UserMapper"><!-- 1.根据用户Id查询用户信息 --><!-- select : 表示一个MapperStatement对象id : statement的唯一标示#{} : 表示一个占位符#{id} : 里面的id表示输入参数的参数名称parameterType : 输入参数的java类型resultType : 输出结果的所映射的java类型 --><select id="findUserById" parameterType="int" resultType="com.wz.mybatis.po.User">SELECT * FROM USER WHERE id =#{id}</select><!-- 2.根据用户名称模糊查询用户列表 --><!-- ${} : 表示一个sql的连接符${value} : 里面的value便是输入参数的参数名称,如果该参数是简单类型,那么${}里面的参数名称必须是value --><select id="findUsersByName" parameterType="java.lang.String" resultType="com.wz.mybatis.po.User">SELECT * FROM USER WHERE username LIKE '%${value}%'</select><!-- 3.添加用户 --><!-- keyProperty : 查询主键,在标签内需要输入查询主键的sqlorder : 指定查询主键的sql和insert语句的执行顺序,相当于insert语句来说LAST_INSERT_ID() : 该函数是mysql的函数,获取自增主键的id,必须配合insert语句一起使用 --><insert id="insertUser" parameterType="com.wz.mybatis.po.User"><selectKey keyProperty="id" resultType="int" order="AFTER">SELECT LAST_INSERT_ID()</selectKey>INSERT INTO USER(username,birthday,sex,address)VALUES(#{username},#{birthday},#{sex},#{address})</insert><!-- 定义sql片段 --><!-- sql片段内,可以定义sql语句中任何部分 sql片段内,最好不用将where和select关键字声明在内 --><sql id="whereClause"><!-- if标签 : 可以对输入的参数进行判断test : 指定判断表达式 --><if test="user != null"><if test="user.username != null and user.username != ''">AND username LIKE '%${user.username}%'</if><if test="user.sex != null and user.sex != ''">AND sex = #{user.sex}</if></if><if test="idList != null">AND id IN<!-- collection : 表示pojo中集合属性的属性名称item : 为遍历出的结果声明一个变量名称open : 遍历开始时,需要拼接的字符串 close : 遍历结束时,需要拼接的字符串 separator : 遍历中间需要拼接的连接符 --><foreach collection="idList" item="id" open="(" close=")" separator=",">#{id}</foreach></if></sql><!-- 综合查询用户列表 --><select id="findUserList" parameterType="com.wz.mybatis.po.UserQueryVo" resultType="com.wz.mybatis.po.User">SELECT * FROM user<!-- where标签:默认去掉后面第一个AND,如果没有参数,则把自己干掉 --><where><!-- 引入sql片段 --><include refid="whereClause" /></where></select><!-- 综合查询用户总数 --><select id="findUserCount" parameterType="com.wz.mybatis.po.UserQueryVo" resultType="int">SELECT count(*) FROM user<!-- where标签:默认去掉后面第一个AND,如果没有参数,则把自己干掉 --><where><!-- 引入sql片段 --><include refid="whereClause" /></where></select></mapper>User.java
public class User {private int id;private String username;private String sex;private Date birthday;private String address;//get、set方法}
UserQueryVo.java
public class UserQueryVo {//用户信息public User user;//商品ID集合private List<Integer> idList;//get set方法}
UserMapper.java
package com.wz.mybatis.mapper;import java.util.List;import com.wz.mybatis.po.User;import com.wz.mybatis.po.UserQueryVo;public interface UserMapper {/** * 根据用户ID查询用户信息 * @param id * @return * @throws Exception */public User findUserById(int id) throws Exception;/** * 根据用户名字模糊查询用户列表 * @param name * @return * @throws Exception */public List<User> findUsersByName(String name) throws Exception;/** * 添加用户 * @param user * @throws Exception */public void insertUser(User user) throws Exception;/** * 综合查询 * @param vo * @return */public List<User> findUserList(UserQueryVo vo);/** * 综合查询用户总数 * @param vo * @return */public int findUserCount(UserQueryVo vo);}MybatisTest.java
package com.wz.mybatis.test;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import com.wz.mybatis.mapper.UserMapper;import com.wz.mybatis.po.User;import com.wz.mybatis.po.UserQueryVo;public class MybatisTest {private SqlSessionFactory sqlSessionFactory;@Beforepublic void setUp() throws Exception {// 读取配置文件// 全局配置文件的路径String resource = "SqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);// 创建SqlSessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}@Testpublic void findUserByIdTest() throws Exception {// 创建UserMapper对象SqlSession sqlSession = sqlSessionFactory.openSession();//由mybatis通过sqlSession来创建代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = userMapper.findUserById(1);System.out.println(user);sqlSession.close();}@Testpublic void InsertUserTest() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("张三");user.setAddress("上海");user.setSex("男");userMapper.insertUser(user);System.out.println(user.getId());sqlSession.commit();sqlSession.close();}@Testpublic void findUserByName() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> users = userMapper.findUsersByName("王");System.out.println(users);sqlSession.close();}@Testpublic void findUserList() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);UserQueryVo vo = new UserQueryVo();List<Integer> idList = new ArrayList<>();idList.add(24);idList.add(25);idList.add(26);vo.setIdList(idList);List<User> users = userMapper.findUserList(vo);int count = userMapper.findUserCount(vo);System.out.println("-------users : " + users);System.out.println("-------count : " + count);sqlSession.close();}}
- MyBatis学习总结一
- Mybatis学习总结一
- MyBatis学习总结(一)
- MyBatis学习总结一
- 【Mybatis学习总结一】Mybatis的helloworld
- Mybatis学习总结(一).初探Mybatis
- MyBatis学习总结(一)
- Mybatis学习总结(一)
- MyBatis学习总结(一)
- Mybatis学习总结(一)
- Spring+MyBatis学习总结(一)
- 重新学习mybatis 总结(一)
- MyBatis 学习总结---理论化知识点(一)
- mybatis的学习总结(一)
- Mybatis学习总结(一)---快速入门
- mybatis学习总结一 快速入门
- Mybatis学习总结(一) 介绍
- MyBatis学习总结(一)——MyBatis快速入门
- Android中使用HttpUrlConnection连接SpringMVC后台,实现登陆如何传用户名和密码
- 怎样上传多个那么name一样的文件??
- 菜鸟求助:如何将用户数据保存到本地文件
- Android开发在代码中控制view的显隐时,界面滚动条滚动
- 2016年终总结,2017何去何从?
- MyBatis学习总结(一)
- tableHeaderView不响应用户触摸事件
- listview 点击item跳转activity B , B在按back 返回 ,但返回时出现的是刷新的动作,怎么可以直接显示
- stringWithFormat的作用,以及方括号怎么用啊?谢谢
- 关于this对象在ajxa的success里头使用无效的原因!!!!!!
- zend编辑器操作
- Activity不能设置背景
- 如何通过 模糊搜索,取得完整关键词!
- Ubuntu下OpenVPN客户端配置教程