mybatis是什么
mybastic是一个持久层的框架,是apache的项目。mybastic让程序将精力放到sql上,通过mybastic提供的映射方式,自由灵活生成满足需要的sql语句,mybastis可以将prepStatement的中的输入参数自动进行输入映射,将查询结果映射成JavaBean
mybatis开发的俩种方式
-
原始dao开发方法(程序需要 编写dao接口和dao实现类) (掌握)
-
mybatic的mapper接口(相当于dao接口) 代理开发方法(需掌握)
####mybatis配置文件 sqlMapConfig.xml
mybatis
####mybatis框架
- sqlMapConfig.xml是mybatis 是mybatis的数全局配置文件,配置了数据库,事物,等mybatis运行环境
- 配置映射文件(配置sql语句) mapper.xml里面配置
- sqlsesstionFactory(会话工厂),创建Sqlsession
- Sqlsession(会话)作业操作数据库(增,删,改,查)
- Executor(执行器) 作用 sqlsession内部通过执行器操作数据库
- mapperstatement(底层封装对象)作用:对操作数据库存储封装,包括sql语句,输入,参数,输入结果的类型
####基于mybatis项目开发的环境搭配,项目是基于IntelliJ IDEA开发
- 将我们需要的jar导入项目之中
mybatis-3.2.7.jar:核心 包
mysql-connector-java-5.0.8-bin.jar链接数据库jar
-
配置日子文件,创建一个log4j.properties
# Global logging configuration log4j.rootLogger=ERROR, stdout # 开发环境设置成debug ,生产环境设置info或者error log4j.logger.org.mybatis.example.BlogMapper=TRACE # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n 复制代码
创建3.5 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>
<properties resource="jdbc.properties"></properties>
<environments default="development">
<environment id="development">
<!-- 使用JDBC的事务管理,事务控制由mybatis -->
<transactionManager type="JDBC">
<property name="..." value="..."/>
<property name="" value=""/>
</transactionManager>
<!--数据库连接池,由mybatis控制-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
复制代码
##映射文件 ##
User.xml(原始的ibatis命名),mapper代理开发映射文件名称:XXXMapper.xml 比如ItemsMapper.xml
在映射文件中配置sql语句,
<?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命名空间:作用就是对sql进行分类化的管理,理解sql隔离
注意:使用mapper代理方式开发,namespace有特殊重要的作用
-->
<mapper namespace="test">
<!--在映射文件中配置很多sql语句 -->
<!--需求:通过id查询用户 -->
<!--通过select执行数据库的查询 id:标识映射文件的sql 将sql语句封装到mappedStatement对象中,所以id称为statement的id
#{}代表一个占位符?
parameterType:指定输入参数的类型,需要跟查询的数据库类型一致
#{id}:其中的id表示接收输入的参数,参数名称就是id,如果输入参数是简单的类型,#{}中的参数可以是任意值
resultType:指定sql输出结果的所映射的Java对象类型,select指定resulttype表示将单条记录映射成的Java对象
-->
复制代码
select * from user where id=#{id};
##SqlMapConfig.xml文件中加载刚才配置好的映射文件##
<!--加载映射文件-->
<mappers>
<mapper resource="sqlmap/user.xml"/>
</mappers>
复制代码
##编写测试类的代码 ##
//mybatis配置文件
String resource="config/mybatis-config.xml";
try {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 通过SqlSession操作数据库
// 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
// sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象
// selectOne查询出一条记录
User user = sqlSession.selectOne("test.findUserById", 1);
System.out.println(user.toString());
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
}
}
复制代码
这里有俩个问题需要注意
- 就是配置文件路劲问题
- 这里千万要注意jdbc.properties 这个文件编写不能有空格什么的,要不然链接就 会一直报错
Access denied for user 'root'@'localhost' (using password: YES)
这个错误可能是没有权限,假如你能用命令行使用登陆,那就不是权限问题
也可能是密码错误,导致链接失败
**最最坑的就是小心有空格......也会导致链接失败,我因为这个问题搞了大半天 **
复制代码