MyBatis 配置文件
mybatis.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 4 <configuration> 5 <typeAliases> 6 <!--<typeAlias type="com.iotek.entity.User" alias="User"/>--> 7 <!--Batis能够自动的把entity包下面的类起一个别名,那么在mapper映射文件中--> 8 <!--就不用写包名了,直接就可以使用类名--> 9 <package name="com.iotek.entity"/> 10 </typeAliases> 11 12 <!--配置数据库连接信息 default的属性指向一个environment的id--> 13 <environments default="development"> 14 <!--可以有多个environment,必须设置一个默认的--> 15 <environment id="development"> 16 <!--事务管理机制,使用的是jdbc来管理sql的事务--> 17 <transactionManager type="JDBC"/> 18 <!--配置数据源,默认启用mybatis自带的连接池--> 19 <dataSource type="POOLED"> 20 <property name="url" value="jdbc:mysql://localhost:3306/homework"/> 21 <property name="driver" value="com.mysql.jdbc.Driver"/> 22 <property name="username" value="root"/> 23 <property name="password" value="root"/> 24 </dataSource> 25 </environment> 26 </environments> 27 28 <mappers> 29 <!--指定sql映射文件的位置--> 30 <mapper resource="com/iotek/mapper/SpareMapper.xml"/> 31 <mapper resource="com/iotek/mapper/UserMapper.xml"/> 32 <mapper resource="com/iotek/mapper/UserDetailsMapper.xml"/> 33 </mappers> 34 </configuration>
UserMapper.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 5 <!--namespace:类似于java中的包名,作用1:让java代码能够寻找到sql语句--> 6 <!--作用2:避免sql的id重名--> 7 <mapper namespace="com.iotek.dao.UserDAO"> 8 <resultMap id="userMap" type="User"> 9 <!--property:实体类的属性名,column:数据库的表列名--> 10 <id property="id" column="id"/> 11 <result property="name" column="name"/> 12 <result property="pass" column="pass"/> 13 14 <!--collection:配置一对多,property:一方中多方的集合属性名,ofType就是多方的类型--> 15 <collection property="userDetailsSet" ofType="UserDetails"> 16 <id property="id" column="userDetailsId"/> 17 <result property="address" column="address"/> 18 </collection> 19 </resultMap> 20 21 <!--select : 封装select查询sql语句--> 22 <!--id:给sql起个名字,让java找到这条sql语句--> 23 <!--resultType:sql语句的执行后的返回值类型,注意只考虑一行数据封装后的结果,不管返回的是一行还是多行--> 24 <select id="selectAllUser" resultMap="userMap"> 25 select u.*,ud.id userDetailsId,ud.address from users u,userdetails ud where u.id=ud.userId 26 </select> 27 28 <!--参数要写在#{参数名}--> 29 <!--参数的命名规则:--> 30 <!--1、如果是一个参数,则名称无所谓,一般写列名一致--> 31 <!--2、如果有多个参数,则sql中的参数名,要和java中的参数名保持一致--> 32 <!--3、如果多个参数是来源于某个类,最常见的就是实体类,那么sql中的参数名就是这个实体类的--> 33 <!--属性名--> 34 <!--参数类型在parameterType中定义--> 35 <!--1、如果是一个参数,那么参数是啥类型,就写啥--> 36 <!--2、如果有多个参数,在java中可以使用map类型存储多个参数的值--> 37 <!--map中的key就是参数名,map中的value就是参数对应的值--> 38 <!--3、如果多个参数是来源于某个类,则parameterType写上这个类的类名--> 39 <select id="getUserById" resultType="com.iotek.entity.User" parameterType="int"> 40 SELECT * from users where id=#{id} 41 </select> 42 43 <!--insert\update\delete 的返回结果都是int类型,所以不用谢resultType--> 44 <insert id="addUser" parameterType="User"> 45 insert into users(name,pass) values(#{name},#{pass}) 46 </insert> 47 </mapper>
如果要用getMapper方法自动生成dao的实现类对象(代理对象)
要求:1、Mapper映射文件中的namespace必须是接口路径(包名+接口名)
2、Mapper中sql的id必须是接口中方法的名字