最近公司做项目要我们自己先熟悉熟悉mybatis,在网上搜了一些资料,照着做了练习,从自己做的过程中犯得错误总结一下。
mybatis 的前生是ibatis,我就先做了一个ibatis连接数据库做简单的增删改查,模糊查询等,接着我又用mybatis做了相同的事情,发现了一些差别,也犯了一些错误记录下来
首先我用的是Myeclipse8.5 数据库是sql2005 (当然你也可以用mysql,oracle)
区别:
第一:驱动包:ibatis我用的是ibatis-2.3.4.726.jar
mybatis用的是mybatis-3.1.1.jar
第二:配置文件
ibatis 的 SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="com/itcast/SqlMap.properties"></properties>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
</dataSource>
</transactionManager>
<sqlMap resource="com/itcast/Student.xml"></sqlMap>
</sqlMapConfig>
mybatis 的mybatis-config.xml
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="com/mybatis/ServerConfig.properties"></properties>
<typeAliases>
<typeAlias type="com.mybatis.Student" alias="Student" />
</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><!--这块是数据库连接用的 也叫数据源-->
<mappers>
<mapper resource="com/mybatis/Student.xml" />
</mappers>
</configuration>
------这里的取数据连接的方式都差不多,只是那个标签变了
ibatis 的 Student.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
<typeAlias alias="Student" type="com.itcast.Student"/>
<select id="selectAllStudent" resultClass="Student">
select *
from student
</select>
<select id="selectStudentById" resultClass="Student" parameterClass="int">
select *
from student
where sid=#sid#
</select>
<select id="selectStudentByName" resultClass="Student" parameterClass="String">
select *
from student
where sname like '%$sname$%'
</select>
<select id="countAllStudent" resultClass="Integer" >
select count(*)
from student
</select>
<insert id="insertStudent" parameterClass="Student">
insert into Student(
sid,
sname,
major,
birth,
score
)
values(
#sid#,#sname#,#major#,#birth#,#score#
)
</insert>
<delete id="deleteStudentById" parameterClass="int">
delete
from Student
where sid=#sid#
</delete>
<update id="updateStudentById" parameterClass="student">
update Student
set
sname=#sname#,
major=#major#,
birth=#birth#,
score=#score#
where sid=#sid#
</update>
</sqlMap>
mybatis 的Student.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.mybatis.Student"><!-- 命名空间是实体类的路径 -->
<select id="selectStudentById" resultType="Student" parameterType="int">
select *
from Student
where sid=#{sid}
</select>
<select id="selectAllStudent" resultType="Student">
select *
from Student
</select>
<insert id="insertStudent" parameterType="Student">
insert into Student(
sid,
sname,
major,
birth,
score
)
values(
#{sid},#{sname},#{major},#{birth},#{score}
)
</insert>
<update id="updateStudentById" parameterType="student">
update Student
set
sname=#{sname},
major=#{major},
birth=#{birth},
score=#{score}
where sid=#{sid}
</update>
<delete id="deleteStudentById" parameterType="int">
delete
from Student
where sid=#{sid}
</delete>
<select id="selectStudentByName" parameterType="String" resultType="Student">
select * from Student where sname like '%${_parameter}%'
</select>
<!--mysql分页查询,sqlserver分页查询未写待定
<select id="find" parameterType="map" resultType="Student">
select * from system_news limit #{inoff},#{pagesize}
</select>
-->
<select id="find_count" resultType="Integer">
select count(*)
from Student
</select>
</mapper>
1,查询的时候参数什么的放两个井号之间,如#sid#
2,模糊查询ibatis--->
select * from student where sname like '%$sname$%'
模糊查询mybatis--->select * from Student where sname like '%${_parameter}%'
注意这个mybatis参数必须是_parameter,我就在这里犯了错,找了好久,给这个连接解释的http://www.myexception.cn/software-architecture-design/1068522.html
如果传入类型为String类型,则参数需统一修改为[_parameter],修改后的sql语句如下(不管你的参数是什么,都要改成"_parameter")
目前就只是发现这些比较深刻,先记下吧,希望像我一样初学者不要再犯我这样的错误