MyBatis的CRUD

MyBatis的认识

1.MyBatis 是一个支持普通SQL查询,存储过程( Oracle最后一天)和高级映射的优秀持久层框架。
2.MyBatis 消除了几乎所有的JDBC代码和手工设置参数以及结果集的检索。
3.MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)
映射成数据库中的记录。
4.MyBatis不能自动创建表,如果能够自动建表,必须自己先准备好建表的sql语句。

MyBatis的简单查询

1.先创建一个简单的java项目
2.导包
① 先创建一个文件夹lib存放jar包
② 导入需要的jar包
在这里插入图片描述
3.因为MyBatis不会自动建表,所以需要现在数据库中创建数据表(employee表为例)
4.配置MyBatis的核心配置文件,文件名随意
mybatis.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">
     
     <!-- 环境们 (很多环境的意思) default:默认使用哪一个环境(必需对应一个环境的id) -->		
<configuration>
	<!--- 导入数据库的相关信息 -->
    <properties resource="jdbc.properties"/>
    <!-- 选择一个环境 -->
    <environments default="development">
	<!--- 一个环境  id:为这个环境取唯一一个id名称 -->
        <environment id="development">
        <!--  事务管理   type:JDBC(支持事务)/MANAGED(什么都不做) -->
            <transactionManager type="JDBC"/>
            <!-- 数据源, 连接池  type(POOLED):MyBatis自带的连接池 -->
            <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>
   	    <!-- 这个mappers代表的是相应的ORM映射文件 -->
        <mapper resource="my/domain/EmployeeMapper.xml"/>
    </mappers>
</configuration>

5.配置映射文件,命名格式:XxxxMapper.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:命令空间 (用来确定唯一) 以前这个是可以不加的,现在必需加
	     namespace的值,规则的:映射文件XxxMapper.xml所在的包+domain类名+Mapper
 -->
    <mapper namespace="my.domain.EmployeeMapper">
    
    <!-- 
		select : 这里面写查询语句
		id:用来确定这条sql语句的唯一
			   以后我们确定唯一,也就是找sql语句 : namespace +.+ id
			 例: cn.itsource.mybatis.day1._1_hello.ProductMapper.get
		parameterType : 传入的参数类型  long:大Long  _long:小long (具体的对应请参见文档)
		resultType : 结果类型(第
        <select id="findOne" parameterType="long" resultType="my.domain.Employee">
    	
          select * from employee where id=#{id}
    
        </select>
    
        <select id="findAll" resultType="my.domain.Employee">
    
          select * from employee
    
        </select>

6.java代码

@Test
    public void testName() throws IOException {
    	//读取MyBatis核心配置文件
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        //创建SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
        //创建SqlSession对象
        SqlSession session = factory.openSession();
        //查询单条数据
       /* Employee employee = session.selectOne("my.domain.EmployeeMapper.findOne",1l);
        System.out.println(employee);*/

		//查询多条数据
        List<Employee> employees = session.selectList("my.domain.EmployeeMapper.findAll");
        for (Employee employee:employees){
            System.out.println(employee);
        }
        //关闭会话
        session.close();
    }

7.抽取工具类SessionUtils

public class SessionUtils {
    private static SqlSessionFactory factory;
    static{
        try{
            Reader reader = Resources.getResourceAsReader("mybatis.xml");
            factory = new SqlSessionFactoryBuilder().build(reader);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public static SqlSession getSession(){
        return factory.openSession();
    }
}

MyBatis的CRUD

注意:增删改需要提交事务

1.添加数据
①java代码

@Test
    public void save(Employee employee){
        SqlSession session=null;
        try {
            session = SessionUtils.getSession();
            session.insert("my.domain.EmployeeMapper.save", employee);
            Long id = employee.getId();//获取添加后对象在数据库的主键值
            session.commit();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            session.close();
        }
    }

② 配置映射文件

<insert id="save" parameterType="my.domain.Employee"
            useGeneratedKeys="true"   是否需要主键
            keyProperty="id">  对象中主键的属性
        insert into employee(username,password,email,headImage,age,
        department_id) values (#{username},#{password},#{email},#{headImage},#{age}
        ,#{department_id})
</insert>

2.修改数据
① java代码

 @Test
    public void update(Employee employee){
        SqlSession session=null;
        try {
            session = SessionUtils.getSession();
            session.update("my.domain.EmployeeMapper.update",employee);
            session.commit();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            session.close();
        }
    }

② 配置映射文件

<update id="update" parameterType="my.domain.Employee">
      update employee set username=#{username},password=#{password},email=#{email},
      headImage=#{headImage},age=#{age},department_id=#{department_id} where id=#{id}
    </update>

3.删除数据
① java代码

  @Test
    public void delete(Long id){
        SqlSession session=null;
        try {
            session = SessionUtils.getSession();
            session.delete("my.domain.EmployeeMapper.delete",id);
            session.commit();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            session.close();
        }
    }

② 配置映射文件

<delete id="delete" parameterType="long" >
       delete from employee where id=#{id}
    </delete>

4.查询数据
① java代码

 @Test
    public void findAll() throws IOException {
        SqlSession session = SessionUtils.getSession();
        List<Employee> employees = session.selectList("my.domain.EmployeeMapper.findAll");
        for (Employee employee:employees){
            System.out.println(employee);
        }
        session.close();
    }
    @Test
    public void findOne() throws IOException {
        SqlSession session = SessionUtils.getSession();
        Employee employee = session.selectOne("my.domain.EmployeeMapper.findOne",1);
        System.out.println(employee);
        session.close();
    }

② 配置映射文件

 <select id="findOne" parameterType="long" resultType="my.domain.Employee">
      select * from employee where id=#{id}
    </select>

    <select id="findAll" resultType="Employee" >
      select * from employee
    </select>

MyBatis中为一个类取别名

方式一:内置别名
在这里插入图片描述
方式二:自定义别名
在MyBaeis的核心配置文件中配置一下代码,在映射文件中的parameterType ,resultType上可以直接写对象的类名

<typeAliases>
		<!-- 
			将一个包下面的所有类都取上别名:<package name="my.domain" />
			alias:取的别名
			type:这个别名所对应的Java类
				:别名使用的时候与大小写无关
		 -->
<typeAlias alias="employee" type="my.domain.Employee" />
<!-- 做项目的时候使用 -->
<package name="my.domain" />
</typeAliases>

解决类名和属性名不对应问题

1.在映射文件上配置

<!-- 
	返回的数据映射 
		type:代表是要映射的对象
		id:代表唯一(过会我们要拿到它)
-->
<resultMap type="cn.itsource.domain.Product" id="productMap">
	<!-- 
		column:对应的列名
		property:对应的属性名
	 -->
	<id column="id" property="id"  />
	<result column="productName" property="name" />
</resultMap>

<select id="queryOne" parameterType="long" resultMap="productMap">
	select * from product where id = #{id}
</select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值