Mybatis学习总结一

一,Mybatis介绍

    Mybatis是apache 的一个开源项目,Mybatis是一个优秀持久层框架,他对jdbc的操作进行了封装,是开发者只需关注SQL本身。Mybatis通过xml或注释的方式将要执行的各种statement(statement、preparedStatement、CallableStatement)配置起来,并通过java对象和statement中的的sql进行映射生成最终的sql语句,最后mybatis框架执行sql并将结果映射成java对象并返回。

二.Mybatis架构

三.Mybatis搭建

    1.主配置文件(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>
    //使用自动扫描包来定义别名
    <typeAliases> 
        //<package>的name属性用于指定被定义的别名的包名,Mybatis会将com.ssm.bean包的POJO类以 
           首字母小写的非限定类名作为他的别名
        <package name="com.ssm.bean"/>
    </typeAliases>

    //配置环境
    <environments default="development"> 
        //环境变量
		<environment id="development"> 
            //使用jdbc事务管理
	        <transactionManager type="JDBC" /> 
               //数据源,数据库连接池
		       <dataSource type="POOLED">
			        <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> 
			        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" /> 
			        <property name="username" value="root" /> 
			        <property name="password" value="briup" /> 
		       </dataSource> 
	    </environment> 
	 </environments> 

    /*配置映射文件路径(有四种方式)
    1.<mapper resource="com/ssm/mapper/UserMapper.xml">使用类路径引入
    2.<mapper url="file:///D:/com/sssm/mapper/UserMapper.xml">使用本地文件路径引入
    3.<mapper class="com.ssm.mapper.UserMapper">使用接口类引入
    4.<mapper resource="com.ssm.mapper">使用包名引入
    这里使用类路径引入
    */
    <mappers>
        <mapper resource="com/ssm/mapper/UserMapper.xml">
    </mappers>
</configuration>

    2.建立一个实体类(User.java)

package com.sm.bean;

public class User {
	private Integer id;
	private String username;
	private String jobs;
	private String phone;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getJobs() {
		return jobs;
	}
	public void setJobs(String jobs) {
		this.jobs = jobs;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]";
	}
	
}

3.建立数据库表(t_user)

4.建立dao层接口

package com.sm.mapper;

import com.sm.bean.User;
/*
    这里是到层的接口不需写实现类,对应着UserMapper.xml文件,每个接口名和UserMapper.xml中标签id所        
    对应。参数类型对应配置文件的parameterType,返回值类型对应配置文件的resultType
*/
public interface UserMapper {
	public User findUserById(Integer id);//通过id查询User
        public int insertUser(User user);//插入User
        public int updateById(User user);//更新User
        public int deleteUserById(Integer id);//通过id删除User
         
}

5.建立一个映射文件(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>标签里面写sql语句
<mapper namespace="com.sm.mapper.UserMapper">
  //映射查询语句,可自定义参数,返回结果集(parameterType参数的数据类型,resultType结果的数据类型)
      这里举例,通过id查询表中信息
    <select id="findUserById" parameterType="Integer" resultType="comssm.bean.User">
        select * from t_user where id=#{id}
    </select>
    //模糊查询
     <select id="findUserByName" parameterType="String" resultType="com.ssm.bean.User">
        select * from t_user where username like concat('%',${value},'%')
    </select>

    //映射插入语句,执行后返回一个整数,代表插入的条数(statementType默认为预编译方式PREPARED)
    <insert id="addUser" parameterType="com.ssm.bean.User" statementType="PREPARED">
        inset into  t_user(username,jobs,phone) values(#{username},#{jobs},#{phone})
    </insert>

    //映射更新语句,执行后返回一个整数,代表更新的条数
    <update id="updateUser" parameterTyoe="com.ssm.bean.User">
        update t_user set username=#{username},jobs=#{jobs},phone=#{phone}
        where id=#{id}        
    </update>

    //映射删除语句,执行后返回一个整数,代表删除的条数
    <delete id="deleteUser" parameterType="Integer"> 
        delete from t_user where id=#{id}
    </delete>

    //用于定义一部分SQL,然后可被其他语句引用此SQL
    举例:
    <sql id="user Conlumns">
        id,username,jobs,phone
    </sql>
    <select id="findUserById" parameterType="Integer" resultType="com.ssm.bean.User">
        select <include refid="user Columns">
        from t_user
        where id=#{id}
    </select>
</mapper>

6.建立SessionFactory工厂类(功能创建Session对象)

package com.briup.mybatis.chap01;

import java.io.IOException;
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 SqlSessionFactoyUtil {
	private static SqlSessionFactory sqlSessionFactoy;
	static {
		String resource="mybatis-config.xml";//主配置文件路径
		try {
			InputStream inputStream=Resources.getResourceAsStream(resource);
			sqlSessionFactoy=new SqlSessionFactoryBuilder().build(inputStream);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
    //获取SqlSession
	public static SqlSession getSession() {
		return sqlSessionFactoy.openSession();
	}
}

7.测试类:MybatisTest.java

1.查询操作

//获取Session
SqlSessionFactoryUtil sqlSessionFactory=new SqlSessionFactoryUtil();
SqlSession sqlSession=sqlSessionFactory.getSession();

//通过id查询
User user=sqlSession.selectOne("com.ssm.mapper.UserMapper.findUserById",2);
//如果查询结果为多条数据(如果没有参数,可以不写)
List<User> list0=sqlSession.selectList("com.ssm.mapper.UserMapper.方法名",参数值);
//模糊查询
List<User> list1=sqlSession.selectList("com.ssm.mapper.UserMapper.方法名","参数值");
//关闭SqlSession
SqlSession.close();

2.插入操作

//前面获取Session的操作不想写了
User user=new User();
user.setUsername("tom");
user.setJobs("worker");
user.setPhone("13934283646");

int rows=sqlSession.insert("com.ssm.mapper.UserMapper.方法名",user);

//事务提交(插入操作必须有提交事务这一步)
sqlSession.commit();

//关闭SqlSession
sqlSession.close();

3.更新操作

User user=new User();
user.setId(4);
user.setUsername("tom");
user.setJobs("teacher");
user.setPhone("13645871234");

int rows=sqlSession.update("com.ssm.mapper.UserMapper.updateUser",user);

//事务提交(更新操作也需要提交事务)
SqlSession.commit();
//SqlSession关闭
SqlSesion.close();

4.删除操作

//通过id删除user
int rows=sqlSession.delete("com.ssm.mapper.UserMapper.deleteUser",4);

//事务提交(删除操作也需要提交事务)
sqlSession.commit();

//关闭SqlSession
sqlSession.close();

8.Mapper动态代理开发方式(测试类:MybatisTest1.java)

//获取Session
SqlSessionFactoryUtil sqlSessionFactory=new SqlSessionFactoryUtil();
SqlSession sqlSession=sqlSessionFactory.getSession();

//通过SqlSession帮上面dao层接口生成实现类对象
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);//UserMapper为到层接口的类名

//通过实现类对象调用接口中抽象方法,从而映射到映射配置文件中的实现方法
User user=userMapper.findUserById(4);//获取到结果对象

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值