1.mybatis入门
1.1先看官网学习
1.2导包
mybatis 的核心包、依赖包、数据库驱动包、日志包
1.3配置
核心配置文件 mybatis-config.xml
<configuration>
<!--导入-->
<properties resource="jdbc.properties" />
<!-- 别名-->
<typeAliases>
<!-- <typeAlias type="cn.itsource.model.Product" alias="Product"></typeAlias>-->
<package name="cn.itsource.model" ></package>
<package name="cn.itsource.vo" ></package>
</typeAliases>
<!--环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<mappers>
<mapper resource="cn/itsource/model/ProductMapper.xml"/>
</mappers>
</configuration>
1.4准备数据库表格
1.5准备相应的domain(product)
创建一个Product对象,和数据库的表对应
环境 DataSource 数据源-连接池 - 复用session会话,不写死,properties
sql.xml -> sql 语句
namespace 命名空间 + 标签名 select update delete insert
找到执行的sql
1.6测试
核心Api
1,读取配置
resources.getAsreaner(“mybatis-config.xml”)
2. 创建sqlsessionfactoty
sqlsessionfactotyBuider.build()
3,获取sqlsession
factory.opensession();
4.sqlsession 操作我们的数据库
selectone (命名空间 + 标签名 , 参数)、
selectList
insert
delete
update
5.关闭sqlsession
2 .细节
2.1 别名
<!-- 别名-->
<typeAliases>
<!-- <typeAlias type="cn.itsource.model.Product" alias="Product"></typeAlias>-->
<package name="cn.itsource.model" ></package>
<package name="cn.itsource.vo" ></package>
</typeAliases>
2.2. 保存后返回主键id
<!-- useGeneratedKeys 是否自增 keyColumn 数据库id keyProperty 实体类属性id-->
2.3批量操作
<foreach collection="list" item="item" separator=",">
(
#{item.productName},
#{item.dir_id},
#{item.salePrice},
#{item.supplier},
#{item.brand},
#{item.cutoff},
#{item.costPrice}
)
</foreach>
2.4动态标签
<if test="name!-null and name!=''"> 如果需要拼接sql
解决数据更新和高级查询
<where>
解决and
<set>
解决逗号
3.常见的错误
1 没有导入数据库的驱动包
2 在XML中很多都是字符串,细心,不要写错
3 在映射文件中全限定名可能会写错
4 找不到相应的Statement(sql语句)
找SQL的Statement写错了
核心XML中没有找相应的映射文件
5 在我们调用Statement(sql语句的时候),经常会忘记传参
6 执行成功后,数据库却没有反映,很有可能是没有提交事务
7 可能我们忘了写执行的代码了
8 错误一定要打印出来(执行的时候没效果,但是又不报错)
9 Mapper中就算一个语句没有使用,它的错也可能会影响到其它正确的语句
10 框架的错往往从后向前找
11 很多同学没有取别名,但是他一直去用(老师你的代码就是这样的啊)
12 字符编码:useUnicode=true&characterEncoding=UTF-8