idea开发必须是把Mapper文件与配置文件放到Resources标记的classpath目录下,eclips好像放到哪都行指定好路径就可以了,
maven里面做好配置resources的路径,不然更新依赖 工程结构标记又没了
<build>
<resources>
<resource>
<directory>src/main/java/Resources</directory>
</resource>
</resources>
</build>
1.原生使用sqlsessionFcatory去做数据库操作,很麻烦
@Testpublic void qeryByNameTest() throws IOException {//加载核心配置文件InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");//创造sqlsessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();List<User> list= sqlSession.selectList("user.queryByName","王五");for (User u:list){System.out.println(u.toString());}
2.使用mapper动态代理由mybatis根据你的 mapper类的接口名与映射文件里面的id名一致,指明了namespace的是哪个mapper类即可
public interface UserMapper {//遵循四个原则//接口 方法名 == User.xml 中 id 名//返回值类型 与 Mapper.xml文件中返回值类型要一致//方法的入参类型 与Mapper.xml中入参的类型要一致//命名空间 绑定此接口public User queryById(Integer id); }@Testpublic void userMapperTest(){InputStream inputStream = null;{try {inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");} catch (IOException e) {e.printStackTrace();}}//创造sqlsessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession= sqlSessionFactory.openSession();UserMapper userMapper=sqlSession.getMapper(UserMapper.class);User user= userMapper.queryById(10);System.out.println(user); }
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><!-- 是用resource属性加载外部配置文件 比如jdbc信息,公共常量配置信息--><properties resource="jdbc.properties"></properties> <!--配置别名 方便开发中的 (多半的返回值与参数值是实体类)使用简单的缩写类名,而不是全路径 在就可以使用设置的别名了 别名大小写不敏感--><typeAliases><!--<typeAlias type="com.web.mybatis.pojo.User " alias="User"></typeAlias>--><!--扫描此包 及子包下所有的类文件--><package name="com.web.mybatis.pojo" ></package></typeAliases><!-- 和spring整合后 environments配置将废除 --><environments default="development"><environment id="development"><!-- 使用jdbc事务管理 可配置数据库连接池或者 使用上面properties里面的信息${username}--><transactionManager type="JDBC" /><!-- 数据库连接池 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url"value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="123456" /></dataSource></environment></environments> <!--告诉你的sql mapper文件在哪 这个sqlMapConfig做统一管理--> <mappers><!--注册指定包下的所有mapper接口 使用iDEA要在resources目录下去存放mapper文件--><mapper resource="Mapper/UserMapper.xml" ></mapper><!--如:<package name="cn.web.mybatis.mapper"/>--> <!--注意: 此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。–>--> </mappers></configuration>
UserMapper.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"><!--mapper文件就是写sql语句的,mybatis只需要程序员关注sql语句本身--> <!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 比如queryById在两个mapper xml都有这个id,为了区分使用namespace --> <mapper namespace="com.web.mybatis.mapper.UserMapper"><select id="queryById" parameterType="Integer" resultType="User">select * from user where id=#{v} </select><!-- //根据用户名称模糊查询用户列表#{} select * from user where id = ? 占位符 ? == '五'${} select * from user where username like '%五%' 字符串拼接 --><!---- select * from `user` where username like #{name}--><select id="queryByName" parameterType="String" resultType="user">select * from `user` where username like '%${value}%'</select><!-- 保存用户 --><!-- selectKey 标签实现主键返回 --><!-- keyColumn:主键对应的表中的哪一列 --><!-- keyProperty:主键对应的pojo中的哪一个属性 --><!-- order:设置在执行insert语句前执行查询id的sql,孩纸在执行insert语句之后执行查询id的sql --><!-- resultType:设置返回的id的类型 --><insert id="saveUser" parameterType="user"><selectKey keyColumn="id" keyProperty="id" resultType="Int" order="AFTER">SELECT LAST_INSERT_ID()</selectKey>INSERT INTO `user`(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address})</insert><update id="updateUserById" parameterType="user">UPDATE `user` SETusername = #{username} WHERE id = #{id}</update><!-- 删除用户 --><delete id="deleteUserById" parameterType="int">delete from user whereid=#{id}</delete> </mapper>