MyBatis入门教程及基础进阶
来源:互联网 发布:淘宝如何赚钱 编辑:程序博客网 时间:2024/05/29 17:31
转载请注明出处:http://blog.csdn.net/qq_15002323/article/details/51306354
MyBatis简介
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类—-Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
MyBatis之初体验
1.准备工作
创建“初体验”数据库(MySQL),设计简单表结构,填充测试数据:
下载相关jar包(mybatis-3.1.1.jar,mysql-connector-java-5.1.6-bin.jar)
2.创建工程
新建一个普通Java工程
新建libs文件夹,将上面的两个jar包添加进来,然后add to build path:
3.编码实现
在src目录新建三个package:model,mapper,test;
model中新建User类:
package model;public class User { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; }}
mapper中添加userMapper.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用作标识mapper的唯一,通常包名+文件名 --><mapper namespace="mapper.userMapper"> <select id="findAll" resultType="model.User"> select * from user </select></mapper>
conf.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:3306/mybatis-tutorial" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <!-- resource需要写成路径的形式 --> <mappers> <mapper resource="mapper/userMapper.xml"/> </mappers></configuration>
在test包下新建测试类Test.java:
package test;import java.io.InputStream;import java.util.List;import model.User;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class Test { public static void main(String[] args) { String resource = "mapper/conf.xml"; InputStream is = Test.class.getClassLoader().getResourceAsStream( resource); // build接受不同的参数,可采取其他方法创建SqlSessionFactory SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder() .build(is); SqlSession session = sessionFactory.openSession(); String statement = "mapper.userMapper.findAll"; // session拥有多个方法,可以自行研究 List<User> users = session.selectList(statement); for (User user : users) { System.out.println(user); } }}
完成了的效果就是这样滴:
4.激情测试
运行Test.java,观看控制台输出:
提高
虽然只是个入门篇,但我们都有颗求知的心。嗯,学习学习= ̄ω ̄=
参数传递
修改上述userMapper.xml,添加单个查询:
<!-- 查询参数用#{}表示,注明parameterType类型 --> <select id="findUserByName" parameterType="String" resultType="model.User"> select * from user where name = #{name} </select>
那么调用语句随之也会改变:
String statement = "mapper.userMapper.findUserByName"; List<User> users = session.selectList(statement, "科比");
那么传递多个参数咧,有几种方法,但是适合自己就是最好的,我比较喜欢用map:
<select id="findUserByNameAndAge" parameterType="Map" resultType="model.User"> select * from user where name = #{name} and age = #{age} </select>
同时修改调用代码:
String statement = "mapper.userMapper.findUserByNameAndAge"; Map<String, String> params = new HashMap<String, String>(); params.put("name", "科比"); params.put("age", "18"); List<User> users = session.selectList(statement, params);
测试通过:
配置优化
程序猿都是非常懒的,反正我就这样。。上面mapper里面每次用到User类时,都需要写出全名resultType="model.User"
。若是工程大了,写的地方多了,忒累了啊。我们可以给这个类起一个别名,这个需要在conf.xml的<configuration></configuration>
里面配置:
<typeAliases> <typeAlias alias="user" type="model.User"/> </typeAliases>
这样我们用的时候就不用写全称了,直接写这个别名就行:
<select id="findAll" resultType="user"> select * from user </select>
可能,我们编写的model与数据库字段不对应,这样还能正常运行程序吗?一试便知,修改User代码:
package model;public class User { private int id; private String name; private int score; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", score=" + score + "]"; }}
就只是将age换成了score了,运行程序:
很明显score这个属性没有被正常赋值,这个时候我们就需要用resultMap了,修改mapper下的userMapper.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用作标识mapper的唯一,通常包名+文件名 --><mapper namespace="mapper.userMapper"> <resultMap type="user" id="user"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="score"/> </resultMap> <select id="findAll" resultMap="user"> select * from user </select></mapper>
运行程序,期待结果吧:
这样就完美解决了表字段与类属性不对应的情况了。嗯嗯~~
那么数据库配置就这样写在xml里面是不是有失妥当,额,新建一个db.properties:
driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mybatis-tutorialusername=rootpassword=123456
同时需要修改conf.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> <!-- 注意:每个标签必须按顺序写,不然蛋疼的DTD会提示错误:The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,mappers?)". --> <properties resource="db.properties" /> <typeAliases> <typeAlias alias="user" type="model.User" /> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- 配置数据库连接信息 --> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <!-- resource需要写成路径的形式 --> <mappers> <mapper resource="mapper/userMapper.xml" /> </mappers></configuration>
完美运行啊有木有,目前就知道这么多了,我也是小白一枚,第一次学就写这个当笔记吧,要是有错误的地方读者一定要吐槽下,定当改正。拜拜(^__^) 嘻嘻……
- MyBatis入门教程及基础进阶
- VIM基础及进阶
- vim-基础及进阶
- Bamboo入门教程及基础操作
- maven基础入门教程及常用命令
- Android基础入门教程——4.2.2 Service进阶
- mybatis入门教程
- mybatis入门教程
- Mybatis入门教程
- MyBatis入门教程
- mybatis入门教程
- mybatis入门教程
- mybatis入门教程
- mybatis入门教程
- MyBatis入门教程
- MyBatis 入门教程
- MyBatis入门教程
- mybatis入门教程
- linux下libxml工具的安装
- JQuery Resizable详解(转)
- 用小猫统计制作运动员评价管理系统:展示一下前面的设计成果
- Java中使用Jedis操作Redis
- 细说new与malloc的10点区别
- MyBatis入门教程及基础进阶
- JNA dll Unable to load library 修改JRE路径
- vi 整行 多行 复制与粘贴
- Android:WebView加载url网页显示不完整解决办法
- HDOJ(HDU) 2132 An easy problem
- HTML——7(窗体与后台处理)
- android apk 自我保护技术-加密apk
- 手机APK加固后二次打包教程
- 用于验证javascript代码性能的两种使用的方法