一、需求架包:
mybatis-3.3.0.jar。以及所附带的架包和数据库架包——mysql-connector-java-5.1.13-bin.jar
下载地址:https://github.com/mybatis/mybatis-3/releases
二、配置主要配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!--这个配置开头在架包里面的说明文档里面Config是主配Mapper是映射开头-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- <typeAliases>
<!-- 引入外部配置文件 -->
<properties resource="mysql.properties"></properties>
<!-- 这里是设置连接的内容 -->
<enviroments default="">
<enviroment id="">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC"></transactionManager>
<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<dateSource tpye="POOLED">
<!-- 这里是JDBC里面设置driver的替代 -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<!-- 这里是设置路径,3306端口后面接数据库的名称 -->
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis" />
<!-- 设置进入数据库的名字密码 -->
<property name="username" value="进入数据库管理员名字" />
<property name="password" value="密码" />
</dateSource>
</enviroment>
</enviroments>
<!-- 这里是指定映射文件的路径 -->
<mappers>
<mapper resource="路径/映射文件名.xml"/>
</mappers>
</configuration>
三、配置映射文件
<?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就是指这个映射文件的名字,需要与dao接口一致 -->
<mapper namespace="这里也要全限定名不然无法找到">
<!-- 增删改的标签头都不一样。id与接口方法名绑定
parameterType需要参数类型的全限定名
-->
<insert id="insertCustomer" parameterType="名字">
<!--添加语句-->
insert into customer values(null,#{cname},#{cprice})
</insert>
<!--在使用多参数的是,要么在Dao接口的方法参数前使用注解@Param("参数名")在映射文件里使用,要么就直接只用参数数组下标,从零开始计数。但是使用注解后就不能再使用下标表示,没有注解的参数依旧可以用下标表示。 -->
<update id="updateCustomer">
UPDATE customer SET cname = #{cname} WHERE cid = #{cid}
</update>
<update id="deleteCustomer">
DELETE FROM customer
WHERE cid = #{cid}
</update>
</mapper>
四、创建实体类
五、创建Dao接口
六、注意事项
- $和#的区别
1.1 #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
1.2$将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
1.3. #方式能够很大程度防止sql注入。
1.4.$方式无法防止Sql注入。
1.5.$方式一般用于传入数据库对象,例如传入表名.
1.6.一般能用#的就别用$.
MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
字符串替换
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
这里MyBatis不会修改或转义字符串。
重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。
2.因为现在只用了MyBatis所以需要自己用语句提交
3.在使用多参数的是,要么在Dao接口的方法参数前使用注解@Param("参数名")在映射文件里使用,要么就直接只用参数数组下标,从零开始计数。但是使用注解后就不能再使用下标表示,没有注解的参数依旧可以用下标表示。
4.在配置文件中,像XML这样的文件使用“/”来表示分层,JAVA文件用“.”来分层。