大家好我是橙子同学,代码圈子里的一只小蝼蚁,但是小蝼蚁也有大梦想,每每看到大佬对编程技术侃侃而谈的时候,脚底的我只配顶礼膜拜,于是橙子同学立志也要成为大佬(菜鸟变大佬属实有些异想天开),打开CSDN的瞬间小橙好像感觉自己变成了茫茫沙漠中的一粒沙,太渺小太普通太平凡啦啊啊啊啊,“要不现在转行?”“转行我能干啥?”“办公室里的端茶小妹??”漏!大漏特漏!那样的生活绝不是我的终极目标,我要成为让端茶小妹崇拜的人,于是我咬咬牙,跺跺脚,我偏要吃IT的这口饭!拿头发换我也愿意(有点上头,撤回来得及么),于是我默默潜水80多天,终于 鼓起勇气 写下了我的第一篇文章,第一次落笔不赶写太深奥的东西,学啥写啥吧,肯定有不足,轻点喷~~
目录
和它相识的原因
橙子第一次遇见到Mybatis是在一个极其平淡无趣的夜晚,为什么会认识它呢,原因很简单:写作业,原来到了大学也要写作业,嗯~没错 是这样的,这已经不是一个秘密了。上完课的橙子兴高采烈地打开了她最喜爱的软件——IDEA,哦好吧,LOL笑了笑,但它没说话。
浅层次的了解一波这个家伙
打开百度百科(没错,这个东西好用极了,他几乎能十分正经的解释橙子同学95%以上的陌生词汇),敲击键盘输入Mybatis,橙子的大脑预感到有一波新知识的到来,它显得有些兴奋。https://baike.baidu.com/item/MyBatis/2824918?fr=aladdin
原来Mybatis的曾用名是iBatis,是一款优秀的持久层框架,还是开源的,大气!支持定制化 SQL、存储过程以及高级映射。 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集,橙子有一种代码量将大大减少的预感,好感度+1。
以前使用JDBC操作数据库时,有很多不方便的地方,首先,数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,当然啦,连接池可解决这个问题,其次sql变动需要改变java代码,在使用preparedStatement向占有位符号传参时,因为sql语句的where条件不确定,修改sql,修改java代码,重新翻译,重新打包部署,小橙为他感到心累,由此带来的就是sql语句在代码中硬编码,代码不易维护!
Mybatis是一款ORM(O:object;R:relation;M:mappering 对象关系映射)框架——数据库框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。这其中的映射其实指的就是 java对象和关系型数据库中二维表之间的映射,把 java对象映射到数据库的表格中,使用ORM持久化的时候,可以操作Java中的对象,并完成持久化。
“简单易学,灵活、解除sql与程序代码的耦合……” 哇 ,橙子就是喜欢简单的东西。
了解之后可以入门啦
(1) 创建Meven项目(简简单单)
(2)导入mybatis及依赖坐标(记得刷新)
(3)创建实体类( 实体类的属性和数据库的字段保持一致 )
(4)编写数据访问层:创建数据访问层接口类 UserDao ()
public interface UserDao {
public List<User> findAll();
}
(5)编写核心配置文件:resources目录下创建一个配置文件 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>
<!--配置mybatis环境-->
<environments default="mysql">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事物管理类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="com/src/dao/UserDao.xml"></mapper>
</mappers>
</configuration>
(6)编写映射文件:在项目的 resources目录下, 创建和dao层一模一样的包结构, 创建映射配置文件 UserDao.xml ( 创建位置:必须和持久层接口在相同的包中; 名称:必须以持久层接口名称命名文件名,扩展名是.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 namespace="com.yll.dao.UserDao">
<select id="findAll" resultType="com.yll.domain.User">
select * from user
</select>
</mapper>
(7)测试(在test包里创建测试类)
@Test
public void test1() throws IOException {
//1. 读取配置文件,通过mybatis提供的Resources对象读取
//InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
InputStream is = MybatisTest.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
//2. 获取sqlSession工厂对象 sqlSessionFactory
//2.1 获取SqlSessionFactory的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//2.2. 获取sqlSession工厂对象
SqlSessionFactory sf = builder.build(is);
//3. 获取sqlSession对象
SqlSession sqlSession = sf.openSession();
//4. 使用SqlSession创建dao接口的代理对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
//5. 使用代理对象执行查询所有方法
List<User> users = userDao.findAll();
System.out.println(users);
//6. 释放资源
sqlSession.close();
is.close();
}
注意事项
1. mapper映射文件要和对应的dao接口类同名,且在同一路径下
2. mapper映射文件的namespace要标识到具体的dao接口类
3. mapper映射文件中的sql节点id要与dao接口类中的方法名相同
4. mapper映射文件中的sql节点要有返回值类型才能得到操作后的数据
5. 在使用IDEA工具开发时(eclipse无此问题)如果在resources中创建映射文件目录时只能一层一层的创建,不会自动生成。
心得
最大感觉就是操作数据库方便了许多,可能这些都只是最基本的Mybatis知识,但是橙子同学也浅浅的感受到了框架的魅力,把问题划分开来各个解决,易于控制,易于延展,易于分配资源。能感觉到我学习的东西都很基础,可是这也确实是实在的收获,希望可以帮助更多还在学习基础的小可爱们,小橙也会继续努力的!