Mybatis初识

MyBatis

1.MyBatis简介

之前叫iBatis 之后google改名为MyBatis(新版本)
作用:封装了JDBC操作,简化数据库访问
封装功能如下:
封装了获取连接,执行SQL,释放连接
封装了SQL参数设置(参数Emp)
insert into emp(name,age) values(#{name},#{age})
封装了记录映射成实体对象过程就是 RowMapper
实体类属性名与查询结果集ResultSet中列名保持一致
用别名的话以别名为准。就是说以显示出来的为准.
开发者的主要工作:写SQL和实体类,然后使用SqlSession对象执行SQL操作.

2.MyBatis主要结构

引入jar包(驱动包+mybatis包)
还要引入SqlMapConfig.xml 配置文件

这里写图片描述

如果再来个表,再写个实体类,加个xml文件

这里写图片描述

3.MyBatis使用方法

导入包。导入配置文件。
写实体类。注意要和数据库中字段名要一致。
写Mapper.xml SQL语句文件

SqlMapConfig.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>  

    <environments default="development">  
        <environment id="development">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="com.mysql.jdbc.Driver" />  
                <property name="url" value="jdbc:mysql://localhost/jsd1507db" />  
                <property name="username" value="root" />  
                <property name="password" value="root" />  
            </dataSource>  
        </environment>  
    </environments>  
    <!-- 指定加载SQL定义文件 -->

    <mappers>  
     <!-- 指向sql语句xml文件 -->
        <mapper resource="entity/EmpMapper.xml" />  

    </mappers>   


</configuration>  

实体类

package entity;

import java.io.Serializable;

public class Emp implements Serializable{
    private Integer id;
    private String name;
    private Double salary;
    private Integer age;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Double getSalary() {
        return salary;
    }
    public void setSalary(Double salary) {
        this.salary = salary;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }

}

SQL语句Mapper.xml
EmpMapper.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">
<!--等价于dao接口的实现 namespace必须和接口的类路径一样 -->
<mapper namespace="empsql">
<!-- 这个针对的命名空间是empsql 这个select查询出来的结果映射成enity下的Emp类型 -->
<select id="findAll" resultType="entity.Emp">select * from emp</select>

<!-- 如果要有值传入sql语句。那么就可以把?换成#{属性名}  然后在select属性写传入值的类型 -->
<select id="findlikeName" parameterType="String"  resultType="entity.Emp">select * from emp where name like #{name}</select>

</mapper>

测试类(创建SqlSession对象)

package test;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

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 TestMybatisEmp {



    public static void main(String[]args) throws IOException{

        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //加载SqlMapConfig.xml文件
        String conf = "SqlMapConfig.xml";
        InputStream configStream = TestMybatisEmp.class.getClassLoader().getResourceAsStream(conf);
        //获取SqlSessionFactory
        SqlSessionFactory factory =builder.build(configStream);

        //获取SqlSession
        SqlSession session = factory.openSession();

        System.out.println("使用SqlSession操作");
        //操作完要释放session
        session.close();

    }
}

这里写图片描述

要注意细节。我就是遇到有的地方少写了字母。就导致了错误。但是针对报错进行修改还是容易些。

要是想使用Mapper.xml文件的sql语句
例如:查询所有:

    List<Emp> list = session.selectList("findAll");
        for(Emp emp :list){
            System.out.println("id: "+emp.getId()+" name: "+emp.getName());
        }

如果是查询单行就是selectOne()

这里写图片描述

有参数的:

    Emp emp =  session.selectOne("findlikeName","lue");
        System.out.println("id: "+emp.getId()+" name: "+emp.getName());

其Mapper.xml 的对应配置是:

<!-- 如果要有值传入sql语句。那么就可以把?换成#{属性名}  然后在select属性写传入值的类型 -->
<select id="findlikeName" parameterType="string" resultType="entity.Emp">select * from emp where name = #{name}</select>
千万不要忘了写返回类型
resultType="entity.Emp"
同理:根据id查询:
<select id="findById"  parameterType="int"  resultType="entity.Emp" >select * from emp where id=#{id}</select>

对测试中如果返回为null。那么就是返回说未查询到!

删除是

<delete id=”delete” parameterType=”int”>
delete from emp where id=#{id}
<delete/>

更新是

<update id=”updateSalary” parameterType=”entity.Emp”>
update emp set salary=${salary} where id=#{id}
</update>

还是用这个Emp。但是使用salary这个属性和id属性

!!!!!!!!!!!!!!!!!!!!!!!
我遇到了问题:::

插入数据库,而数据库的表中显示为null!!!


    <insert id="save" parameterType="entity.Emp">
        insert into emp (name,salary,age) values (#{name},#{salary},#{age})
    </insert>
           Emp emp1=new Emp();
            emp.setName("Recar");
            emp.setSalary(8000.0);
            emp.setAge(30);

            session.insert("empsql.save",emp1);
            //这里的操作必须要进行事务提交,要不运行过后数据表并没有插入到信息,数据表的增删改都需要提交事务
            session.commit();
        session.close();

这里写图片描述

研究了一晚上也不知道是怎么回事?求解答。我自己也在寻找解决办法。找到了更新。
恩,复习的时候重新写了一遍就可以用了!!!就可以了就没有NULL了。。。。
好灵异!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值