MyBatis入门第一部分

Posted 大忽悠爱忽悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis入门第一部分相关的知识,希望对你有一定的参考价值。

MyBatis入门

官方中文帮助手册

快速入门

导入依赖

<!--MyBaits依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.1</version>
    </dependency>
  <!--log4j日志依赖-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.14.1</version>
    </dependency>
    <!--mysql驱动的坐标-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.32</version>
    </dependency>

环境搭建

数据库表的环境搭建:

javaBean:(封装数据)

public class people {
    private String name;
    private  Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "people{" +
                "name='" + name + '\\'' +
                ", age=" + age +
                '}';
    }
}

Dao接口,操作数据库:

public interface peopleDao {
    //按照姓名查询员工
    public  people getPeoByName(String name);
}

mybaits全局配置文件,指导mybaits如何正确运行,比如连接哪个数据库

<?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:3306/tx"/>
                <property name="username" value="root"/>
                <property name="password" value="126433"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

sql映射的配置文件(编写每一个方法都如何向数据库发送sql语句,如何指向sql语句),相当于接口的实现类

1.第一步: 将mapper的namespace属性改为接口的全类名

2.第二步:配置细节

<?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">
<!--namespace: 名称空间:写接口的全类名,相当于告诉mybaits这个配置文件是实现哪个接口的-->
<mapper namespace="Com.MyBaits.peopleDao">
    <!--select: 用来定义一个查询操作
    id:方法名,相当于这个配置是对某个方法的实现
    resultType:指定方法运行后的返回值类型(查询操作必须指定的),写全类名
    #{属性名}:代表取出传递过来的某个参数的值-->
    <select id="getPeoByName" resultType="Com.MyBaits.people">
        select * from people where name = #{name}
    </select>
</mapper>

3.第三步:我们写的dao接口的实现文件,mybaits默认是不知道的,我们需要在全局配置文件中注册

<?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:3306/tx"/>
                <property name="username" value="root"/>
                <property name="password" value="126433"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入我们自己编写的每一个接口的实现文件-->
    <mappers>
        <!--resource: 表示从类路径下找资源-->
        <!--如果people.xml放在了peo包下,那么这里路径写peo/people.xml-->
        <mapper resource="people.xml"/>
    </mappers>
</configuration>

配置总结—两个配置—全局配置文件指导mybaits如何运行----dao接口的实现文件,描述dao中每个方法如何工作


测试

第一步:根据全局配置文件先创建一个SqlSessionFactory对象(cv即可,注意修改配置文件的名字)

        //1.根据全局配置文件创建出一个SqlSessionFactory
        //SqlSessionFactory:是Sqlsession工厂,负责创建Sqlsession对象
        //Sqlsession:sql会话(代表和数据库的一次会话)
        String resource = "MyBaits-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

第二步:SqlSessionFactory中获取sqlSession对象操作数据库即可(cv即可)

        //2.获取和数据库的一次会话:getConnection()
        SqlSession sqlSession = sqlSessionFactory.openSession();
        people dhy;
        try{

            //3.使用sqlsession操作数据库,获取到dao接口的实现
            peopleDao peoDao = sqlSession.getMapper(peopleDao.class);
            //4.调用方法
             dhy = peoDao.getPeoByName("大忽悠");
        }finally {
            sqlSession.close();
        }
        System.out.println(dhy);

完整代码:

public class main {
    public static void main(String[] args) throws IOException {
        //1.根据全局配置文件创建出一个SqlSessionFactory
        //SqlSessionFactory:是Sqlsession工厂,负责创建Sqlsession对象
        //Sqlsession:sql会话(代表和数据库的一次会话)
        String resource = "MyBaits-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取和数据库的一次会话:getConnection()
        SqlSession sqlSession = sqlSessionFactory.openSession();
        people dhy;
        try{

            //3.使用sqlsession操作数据库,获取到dao接口的实现
            peopleDao peoDao = sqlSession.getMapper(peopleDao.class);
            //4.调用方法
             dhy = peoDao.getPeoByName("大忽悠");
        }finally {
            sqlSession.close();
        }
        System.out.println(dhy);
    }
}


增删改查演示

peo接口:

public interface peopleDao {
    //按照姓名查询员工
    public  people getPeoByName(String name);
    //更新员工
    public boolean updatePeo(people peo);
    //删除员工
    public Integer deletePeo(people peo);
    //插入员工
    public Long insertPeo(people peo);
}

people.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">
<!--namespace: 名称空间:写接口的全类名,相当于告诉mybaits这个配置文件是实现哪个接口的-->
<mapper namespace="Com.MyBaits.peopleDao">
    <!--select: 用来定义一个查询操作
    id:方法名,相当于这个配置是对某个方法的实现
    resultType:指定方法运行后的返回值类型(查询操作必须指定的),写全类名
    #{属性名}:代表取出传递过来的某个参数的值-->
    <select id="getPeoByName" resultType="Com.MyBaits.people">
        select * from people where name = #{name}
    </select>

    <update id="updatePeo">
        update people set name=#{name},age=#{age}
where name=#{name}
    </update>

    <delete id="deletePeo">
        delete from people where name=#{name}
    </delete>

    <insert id="insertPeo">
        insert into people values(#{name},#{age})
    </insert>
</mapper>

测试主类:

public class main {
    static  SqlSessionFactory sqlSessionFactory;
//将创建工厂这段重复代码抽取处理,工厂只有一个,但是每次获取连接,都是不同的连接
    static public void initSqlSessionFactory() throws IOException {
        String resource = "MyBaits-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }
    public static void main(String[] args) throws IOException {
        //创建工厂镀锡
        initSqlSessionFactory();
        //2.获取和数据库的一次会话:getConnection()
        SqlSession sqlSession = sqlSessionFactory.openSession();
        people dhy;
        try{

            //3.使用sqlsession操作数据库,获取到dao接口的实现(映射器)
            peopleDao peoDao = sqlSession.getMapper(peopleDao.class);
            //4.调用方法

            //1.查询
             dhy = peoDao.getPeoByName("大朋友");
             //2.增加
            Long ins=peoDao.insertPeo(new people("超级大忽悠",19));
            //3.修改
            boolean ret=peoDao.updatePeo(new people("大忽悠",520));
            //4.删除
            int del=peoDao.deletePeo(new people("大朋友",20));
            System.out.println("增添的结果:"+ins);
            System.out.println("修改的结果为:"+ret);
            System.out.println("删除的结果为:"+del);
        }finally {
            //手动提交
            sqlSession.commit();
            sqlSession.close();
        }
        System.out.println("查询的结果:"+dhy);
    }
}



注意:

配置的时候,参数类型不用写

sql语句不要写分号

增删改不用写返回值类型,增删改是返回影响多少行,mybaits自动封装,如果接口方法里面返回值写的是(int,long),那么自动封装为对应的类型返回。 如果是boolen,那么影响0行封装为false,否则为true

#{属性名}:从传入的参数对象中取出对应属性的值

注意:如果没有设置自动提交,那么需要手动提交,这样才能正确完成对数据库的增删改查操作

手动提交设置方式:

finally {
            //手动提交
            sqlSession.commit();
            sqlSession.close();
        }

自动提交设置方式:

        SqlSession sqlSession = sqlSessionFactory.openSession(true);

小总结(注意事项)


全局配置文件

properties属性----》引入外部配置文件

jdbc.properties配置文件:

username=root
password=126433
jdbcurl=jdbc:mysql://localhost:3306/tx
dirverclass=com.mysql.jdbc.Driver

MyBaits-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>
    <!--和spring的context: property-placeholder;引用外部配置文件-->
    <!--
     resource:从类路径下开始引用
     url:引用磁盘路径或者网络路径的资源
    -->
    <!--classpath前缀是spring框架才有的-->
    <properties resource="jdbc.properties"> </properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--配置连接池-->
            <dataSource type="POOLED">
                <!--${取出配置文件中的值}-->
                <property name="driver" value="${dirverclass}"/>
                <property name="url" value="${jdbcurl}"/>
                <property name="username" value<

以上是关于MyBatis入门第一部分的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis动态SQL标签用法

mybatis快速入门

Mybatis最入门---代码自动生成(generatorConfig.xml配置)

Spring boot入门:SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示(示例(代码

mybatis入门基础----动态SQL

PTA乙级 (1049 数列的片段和 (20分))