首页 > 代码库 > mybatis入门程序-(二)

mybatis入门程序-(二)

 1. 添加配置文件

 

log4j.properties

# Global logging configuration#开发环境下日志级别设置成DEBUG,生产环境设置成info或者errorlog4j.rootLogger=DEBUG, stdout# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

 

db.properties

;;;;;;;;;;;;;;;;;;;;;DataBaseConnection;;;;;;;;;;;;;;;;;;;;;jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/examjdbc.username=sajdbc.password=123456

 

 

sqlMapConfig.xml  (全局配置文件)

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <!-- 加载属性文件 -->    <properties resource="db.properties">        <!--properties中还可以配置一些属性名和属性值  -->        <!-- <property name="jdbc.driver" value=""/> -->    </properties>    <!-- 全局配置参数,需要时再设置 -->    <!-- <settings>        </settings> -->        <!-- 别名定义 -->    <typeAliases>               <package name="cn.xm.pojo"/>            </typeAliases>        <!-- 和spring整合后 environments配置将废除-->    <environments default="development">        <environment id="development">        <!-- 使用jdbc事务管理,事务控制由mybatis-->            <transactionManager type="JDBC" />        <!-- 数据库连接池,由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>    <!-- 加载 映射文件 -->    <mappers>             <package name="cn.xm.mapper"/>                <!--引入分开的xml-->      <mapper resource="sqlmap/User.xml"/>    </mappers>    </configuration>

 

 

User.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//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:指定输入 参数的类型,这里指定int型     #{}表示一个占位符号    #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称        resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。     -->     <!-- 开启二级缓存 -->     <cache/>         <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">        SELECT * FROM USER WHERE id=#{value}    </select>                <!-- 需求:通过username模糊查询用户表的记录   resultType:指定sql输出结果 的所映射的java对象类型(无论查出一条记录还是多条记录都是这样)   ${}:Sql字符串拼接符,将接收到的参数不加任何修饰符拼接在sql中。如果参数类型是简单类型,${}中只能使用value   ${}会引起sql注入,就是‘%‘ or 1=1 or ‘%‘,客户输入其他sql语句让程序正常执行     -->    <select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">        SELECT * FROM USER WHERE username like ‘%${value}%‘    </select>                    <!-- 增加用户 (主键自增)-->    <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User" >        insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})                <!--获取自增主键设置的主键值,利用mysql的SELECT last_insert_id()  返回上次插入数据的主键 (只适用于自增主键)          keyProperty:将查询到的主键值映射到parameterType对应的对象的哪个属性          resultType:指定查询到的id返回的结果类型          order:指定相对insert语句的执行顺序         -->        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">           SELECT last_insert_id()        </selectKey>    </insert>                <!-- 删除用户,根据Id删除 ,需要输入Id(int型)    #{id}表示取一个参数,根据参数指定的类型    -->    <delete id="deleteUserByTd" parameterType="int">    delete from user where id=#{id}    </delete>            <!-- 更新用户,根据Id更新 ,需要传入Id(int型)与更新信息    parameterType类型为User类型,指定需要修改的用户id和修改后的属性值,#{username}表示从传入的对象中取对应的username属性    #{id}表示从user对象中获取id    -->    <update id="updateUserByTd" parameterType="cn.itcast.mybatis.po.User">    update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}    where id=#{id}    </update>        </mapper>

 

 

2.入门代码测试:

  (1)根据Id查询用户信息

技术分享

 

 

  (2)模糊查询代码测试

技术分享

 

  (3)添加用户

技术分享

 

 

  (4)删除用户

技术分享

 

 

  (5)更新用户

技术分享

 

 

 

总结:

  1.  parameterType

    在映射文件中通过parameterType指定输入 参数的类型。

2.     resultType

    在映射文件中通过resultType指定输出结果的类型。

3.    #{}和${}

#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,#{}中可以写成value或其它名称。

#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

 

${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。

${}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,${}中只能写成value。

${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

 

4.  selectOne和selectList

  selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。

  selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。

 

如果使用selectOne报错:

  org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4

 

5.  mybatis和hibernate本质区别和应用场景

  

hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。对sql语句进行优化、修改比较困难的。

应用场景:

         适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。

 

mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。

应用场景:

         适用与需求变化较多的项目,比如:互联网项目。

 

企业进行技术选型,以低成本 高回报作为技术选型的原则,根据项目组的技术力量进行选择。

 

mybatis入门程序-(二)