MyBatis的入门总结

Mybatis快速入门

1.mybatis认识

1.1概念:是一个ORM的数据库持久化框架(java的持久层框架)
		ORM:对象关系映射
		数据库持久化:将数据保存到数据库的过程
		mybatis是一个支撑框架,它是以映射SQL语句orm方式来做数据库持久化操作

2.为什么要用mybatis

	mybatis较与jdbc的优势
		jdbc:重复代码比较多,封装对象比较麻烦,没有性能控制,
	如果要提高效率,需要自己写缓存
		mybatis的优势:
		没有太多的重复代码,封装对象(不用手动处理参数)
				-->select User对象
				性能控制 缓存
				SQL统一管理,维护比较方便(把SQL从代码中抽取出来)

3.使用mybatis

3.1导包

``在这里插入图片描述
这是我导的包,可以参考一下

3.2写配置文件
<?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>
    <!--引入jdbc.propeties文件-->
    <properties resource="jdbc.properties" />
    <typeAliases>
        <!--
        配置单独的类
        <typeAlias type="cn.hx.domain.User" alias="User"></typeAlias>
        -->
        <!--配置包   这个常用-->
        <package name="cn.hx.domain"></package>
        <package name="cn.hx.query"></package>
    </typeAliases>
    <!-- 环境们 (很多环境的意思)
        default:默认使用哪一个环境(必需对应一个环境的id)-->
    <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.driverClassName}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- 这个mappers代表的是相应的ORM映射文件 -->
    <mappers>
        <mapper resource="cn/hx/domain/UserMapper.xml" />
    </mappers>

</configuration>
3.3引入配置
		//调用配置中的方法
        Reader reader = Resources.getResourceAsReader("MyBatis-Config.xml");
        //获取到SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
3.4获取到sqlSession
		//通过sqlSessionFactory获取到sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

4.这里是一个完成查询所有的案例

	配置文件
<?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">
<!-- orm框架 sql的映射
namespace:命名空间  namespace路径+ id值
          namespace怎么配置 包名.接口名 + queryAll
-->
<mapper namespace="cn.hx.dao.IUserDao">
    <!-- 查询 queryAll()
        resultType 返回类型
    -->
    <select id="queryAll" resultType="User">
        select * from t_user
    </select>
    <select id="queryOne" parameterType="long" resultType="User">
        select * from t_user where id=#{id}
    </select>
    <insert id="save" parameterType="User"
            useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        insert into t_user(name) value(#{name})
    </insert>
    <delete id="delete" parameterType="User"  >
        delete from t_user where id=#{id}
    </delete>
    <!--批量删除-->
    <delete id="deleteBatch" parameterType="list">
        delete from t_user where id in
        <foreach collection="list" item="id" open="(" separator="," close=")">
          #{id}
        </foreach>
    </delete>
    <!--批量新增-->
    <insert id="saveBatch" parameterType="list">
        insert into t_user(name) values
        <foreach collection="list" item="user" separator="," >
            (#{user.name})
        </foreach>
    </insert>
    <!--高级查询-->
    <select id="queryList" resultType="User">
        select * from t_user
        <where>
            <if test="name!=null">
                and name like #{name}
            </if>
            <if test="age!=null">
                and age like #{age}
            </if>
        </where>
    </select>

    <update id="update" parameterType="long" >
        update t_user set name = #{name} where id = #{id}
    </update>
</mapper>


	//这是实现类里面的方法
	@Override
    public User queryOne(Long id) throws IOException {
        //调用配置中的方法
        Reader reader = Resources.getResourceAsReader("MyBatis-Config.xml");
        //获取到SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //通过sqlSessionFactory获取到sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        User user = sqlSession.selectOne("cn.hx.dao.IUserDao.queryOne", id);
        return user;
    }
    	//测试
		@Test
        public void test1() throws Exception{ 
                List<User> users = new UserDaoImpl().queryAll();
                users.forEach(e-> System.out.println(e));
        }

5.细节

有很多细节需要注意 例如:
5.1主键
	有些时候在保存数据的时候需要拿到主键,做一些操作
	配置如下几个属性就能完成
			useGeneratedKeys=**"true"** 

​			keyColumn=**"id"**

​			keyProperty=**"id"**
5.1日志log4j
	作用:通过日志,把信息打印出来,便于查看
	使用同样需要导包写配置  导包以前面mybatis的为准,我是一起测试的
配置如下
# 日志输出级别 输出到控制
log4j.rootLogger=ERROR, stdout
#log4j.rootLogger=NONE
log4j.logger.cn.hx=TRACE
# 输出到控制台的配置信息
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# 输出到控制台的 格式类
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

剩余的批量操作与高级查询根据MyBatis的配置进行参考,其实都是大同小异,这里就不在做介绍了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值