mybatis(一)菜鸟日记 --day04 下

Mybatis (一)菜鸟日记–day04 下

一、简述

1.Mybatis 特点

mybatis是java的持久层框架。
1)和原生态jdbc操作数据库相比,减少了硬编码。
2)和原生态jdbc操作相比,减少了频繁的开启和关闭连接,节省数据库资源。
3)sql语句编写在配置文件中,受到开发人员控制,修改查询条件不需要去修改代码。
4)通过输入输出映射将数据库操作和java对象进行关联。

2.Mybatis 操作数据库具体过程

1)通过配置文件SqlMapConfig.xml 创建sqlSessionFactory(会话工厂)
2)Session(会话)通过执行器来操作数据库。
    执行器下面还有一层底层封装对象(statement) 主要实现对数据库操作存储封装:输入输出参数类型和sql语句
    输入输出类型可以简单类型,自定义类型,以及hashMap类型。
    最后数据库得到命令最终执行语句。

二、简单Mybatis框架使用

1.环境配置

    jar包:主要有mybatis工具包以及mybatis的依赖包,日志处理相关jar包,数据库驱动包。
    SqlMapConfig.xml 文件 mybatis核心框架配置
    log4j.properties    打印日志的相关配置。可以在控制台看见mybaits最终生成的语句。
    记得有次浏览器请求页面没有响应,到service层中一行查找记录就没有响应,也不报错。找了半天没找到解决办法,
    当时调试过程中显示的是Mapper代理对象(Spring自动装配)为空,死活不知道为啥,后来想起来忘记加上log4j.properties文件,发现是数据库版本问题!!!!!第一步就错了。。重新安装个低版本数据库后程序就能正常运行了,不过Spring自动装配的对象为啥是null 一直没搞懂。连续几次出现这个问题,代码什么都没改,第二天突然就好了。。也是绝望

相关jar包
相关jar包
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>

</configuration>

log4j.properties

log4j.properties 开发环境下相关配置
log4j.rootLogger=DEBUG,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

2.最简单的mybatis应用程序

1)创建数据库,创建表,创建对应的实体类。

不对,一定是哪里出了问题,这是我的日记啊,记这没用的干嘛

2)建立Mapper.xml文件
<!--命名空间 作用1:分隔(跟包作用差不多) 作用2:mapper代理开发的时候用来和接口名做匹配-->
<mapper namespace="test">
	<!-- 在映射文件中配置多条sql语句 -->
	<!-- id用来标识映射文件中的sql 称为statementId  select 里面封装了sql语句输入输出映射 -->
	<select id="findTbUserById" parameterType="long"
		resultType="com.test.mybatis.pojo.TbUser">
		<!--填入id id表示接收输入的参数,输入的参数名就是id 如果输入参数是简单类型,那么输入的参数名可以任意 resultType 指定查询结果所映射的java对象 -->
		select * from tb_user where id=#{id}
	</select>
</mappper>

resultType是查询出来的单个结果的映射对象,查询多个结果的和查询单个结果返回值相同

3)映射文件加载
	<mappers>
		<!-- resource单个映射文件加载 -->
		<mapper resource="sqlmap/TbUser.xml" />
	</mappers>
4)查询结果

		String resource="SqlMapConfig.xml";
		InputStream inputStream=Resources.getResourceAsStream(resource);;
		
		//创建会话工厂,传入mybatis的配置文件信息
		SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
		
		//通过工厂得到SqlSession 
		SqlSession sqlSession=sessionFactory.openSession();
		
		//操作数据库,使用最简单的selectOne()
        // param1: 命名空间+"."+sqlId(statementId);param2:指定和映射文件中//parameterType匹配的参数
		long id=7;
		TbUser tbUser= sqlSession.selectOne("test.findTbUserById",id);
		System.out.println(tbUser.getUsername());
		//释放资源
		sqlSession.close();

selectOne和selectList:sql语句返回一条2种方法都可以使用。当sql语句返回多条结果用selectOne就会报错
相当于一个小袋子(selectOne)只能装一个苹果,装的多久会炸,大袋子(selectList)能装一堆苹果装一个啥问题没有
代理开发时,selectOne/List 通过返回值来判断 返回值是单个对象自动使用selectOne

3.传统开发方法

1)接口
public interface TbUserDao {
	public TbUser findTbUserById(long in) throws Exception;//抛出异常提高系统健壮性

}

2)实体类
public class TbUserDaoImpl implements TbUserDao {

	//向dao中注入sqlSessionFactory
	//构造方法注入
	private SqlSessionFactory sqlSessionFactory;
	public TbUserDaoImpl(SqlSessionFactory sqlsessionFactory) {
		this.sqlSessionFactory=sqlsessionFactory; 
	}
	@Override
	public TbUser findTbUserById(long in) throws Exception {
		// TODO 自动生成的方法存根
		SqlSession sqlSession=this.sqlSessionFactory.openSession();
		TbUser tbUser= sqlSession.selectOne("test.findTbUserById",in) ;
		sqlSession.close();
		return tbUser;
	}

}

3)测试
public class TbUserDaoImplTest {

	private SqlSessionFactory sqlSessionFactory;
	@Before
	public void setUp() throws Exception {
		//在方法执行前进行 创建sqlSessionFactory
		String resource="SqlMapConfig.xml";
		InputStream inputStream=Resources.getResourceAsStream(resource);;
		sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
	}

	@Test
	public void testFindTbUserByid() throws Exception {
		TbUserDao tbUserDao=new TbUserDaoImpl(sqlSessionFactory);
		TbUser tbUser= tbUserDao.findTbUserById((long)123);
		System.out.println(tbUser);
	
	}

}

4.mapper代理模式

1)mapper代理开发规则
1.接口名和mapper文件namespeace对应
2.方法名和statementId对应  配置的sql语句id
3.输入输出参数和接口方法的参数和返回值相对应
2)接口不变,调用该表
public class TbUserMapperTest {

	private SqlSessionFactory sqlSessionFactory;
	@Before
	public void setUp() throws Exception {
		//在方法执行前进行 创建sqlSessionFactory
		String resource="SqlMapConfig.xml";
		InputStream inputStream=Resources.getResourceAsStream(resource);;
		sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
	}
	@Test
	public void testFindTbUserById() throws Exception {
		SqlSession sqlSession=this.sqlSessionFactory.openSession();
		//new TbUserMapper对象 mybatis自动生成
		TbUserMapper tbUserMapper=sqlSession.getMapper(TbUserMapper.class);
		//调用方法
		TbUser user= tbUserMapper.findTbUserById((long)123);
		System.out.println(user.getUsername());
	}
}

未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将SSM框架中的MyBatis升级到MyBatis-Plus是可行的,可以实现共存。SSM框架由Spring、Spring MVC和MyBatis组成,而MyBatis-Plus是对MyBatis的增强扩展。下面将介绍如何将它们共存。 首先,需要将MyBatis升级到MyBatis-Plus。可以将MyBatis-Plus的依赖项添加到项目的pom.xml文件中,替换原有的MyBatis依赖。然后,需要对原有的MyBatis配置文件进行修改。MyBatis-Plus提供了一些方便的功能和特性,如自动填充、逻辑删除等,可以根据项目需求选择开启或关闭。 在SSM框架中,MyBatis-Plus可以与原有的Spring框架和Spring MVC框架完美共存。Spring框架负责管理和配置各种Bean,MyBatis-Plus可以与Spring框架一起使用,将其作为DAO层的组件进行管理。在Spring的配置文件中,可以将MyBatis-Plus的配置文件加入到配置中。 在Spring MVC框架中,可以继续使用原有的控制器、服务和视图解析器等组件。MyBatis-Plus可以与Spring MVC框架无缝集成,通过Spring MVC接收请求,然后调用MyBatis-Plus进行数据访问和处理。 在具体开发过程中,可以利用MyBatis-Plus提供的一些特性简化开发工作。例如,可以使用MyBatis-Plus的代码生成器来自动生成DAO、实体类和Mapper等代码,减少手动编写的工作量。 总结来说,将SSM框架中的MyBatis升级到MyBatis-Plus是完全可以实现的,它们可以共存并完美集成。通过使用MyBatis-Plus,我们可以更加便捷地开发和管理数据库操作,提高开发效率和代码质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值