所谓的SSM即:
spring+springmvc+mybatis.
MyBatis 简介
1. Mybatis 开源免费框架.原名叫 iBatis,2010 在 google code,2013 年迁 移到 github
2. 作用: 数据访问层框架.
2.1 底层是对 JDBC 的封装.
3. mybatis 优点之一:
3.1 使用 mybatis 时不需要编写实现类,只需要写需要执行的 sql 命令
Mybatis环境的搭建
1.导入mybatis-3.2.7.jar包既可以
2.. 在 src 下新建全局配置文件:
2.1 没有名称和地址要求 :一般习惯叫mybatis.xml
2.2 在全局配置文件中引入 DTD 或 schema
2.2.1 如果导入 dtd 后没有提示 Window--> preference --> XML --> XMl catalog --> add 按钮
没有dtd的小伙伴可以到下面下载
(1)mybatis-3-config.dtd约束文件下载:
http://mybatis.org/dtd/mybatis-3-config.dtd
(2)mybatis-3-mapper.dtd约束文件下载:
http://mybatis.org/dtd/mybatis-3-mapper.dtd
2.3 全局配置内容
即上面创建的mybatis.xml
3. 新建以 mapper 结尾的包,在包下新建:实体类名+Mapper.xml
3.1 文件作用:编写需要执行的 SQL 命令
3.2 把 xml 文件理解成实现类.
3.3 xml 文件内容
namespace:(这是官方给出的解释)
在之前版本的 MyBatis 中,命名空间(Namespaces)的作用并不大,是可选的。 但现在,随着命名空间越发重要,你必须指定命名空间。
命名空间的作用有两个,一个是利用更长的完全限定名来将不同的语句隔离开来,同时也实现了你上面见到的接口绑定。就算你觉得暂时用不到接口绑定,你也应该遵循这里的规定,以防哪天你改变了主意。 长远来看,只要将命名空间置于合适的 Java 包命名空间之中,你的代码会变得更加整洁,也有利于你更方便地使用 MyBatis。
命名解析:为了减少输入量,MyBatis 对所有的命名配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则。
4. 测试结果(只有在单独使用 mybatis 时使用,以后 ssm 整合时下面代 码不需要编写.)
SqlSession session = null;
try {
InputStream is = Resources.getResourceAsStream("mybatis.xml");
// 使用工厂设计模式
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
// 生产sqlsession
session = factory.openSession();
List users = session.selectList("pojo.User.getAll");
for (User user : users) {
System.out.println(user.toString());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
session.close();
}
测试结果:
没问题!
如果发生异常的话
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for pojo.User.getAll
### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for pojo.User.getAll
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:111)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:98)
at test.Test.main(Test.java:23)
Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for pojo.User.getAll
at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:797)
at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:631)
at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:624)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:107)
... 3 more
报错显示:没有找到映射
说明:mybatis.xml文件里少了映射
添加上就行
全局配置文件中内容
1.1 type 属性可取值
1.1.1 JDBC,事务管理使用 JDBC 原生事务管理方式
1.1.2 MANAGED 把事务管理转交给其他容器.原生 JDBC 事务 setAutoMapping(false);
1.2 type 属性
1.2.1 POOLED 使用数据库连接池
1.2.2 UNPOOLED 不实用数据库连接池,和直接使用 JDBC 一样
1.2.3 JNDI :java 命名目录接口技术.
常见的三种查询方式
1.适用于查询结果都需要遍历的需求
List list = session.selectList("a.b.selAll");
for (Flower flower : list) {
System.out.println(flower.toString());
}
2.selectOne() 返回值 Object,
2.1 适用于返回结果只是变量或一行数据时
int count=session.selectOne("pojo.User.getAllCount");
System.out.println(count);
输出结果:3
User user=session.selectOne("pojo.User.getById");
System.out.println(user.toString());
3.selectMap() 返回值 Map
3.1 适用于需要在查询结果中通过某列的值取到这行数据的需求.
3.2 Map
//此处将username作为map的key,将值作为value
Map users=session.selectMap("pojo.User.getMap", "username");
System.out.println(users);
类型映射表:
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
如果有什么不对的地方请指出!!
个人微信公众号: