idea开发必须是把Mapper文件与配置文件放到Resources标记的classpath目录下,eclips好像放到哪都行指定好路径就可以了,
maven里面做好配置resources的路径,不然更新依赖 工程结构标记又没了
<build>
<resources>
<resource>
<directory>src/main/java/Resources</directory>
</resource>
</resources>
</build>
1.原生使用sqlsessionFcatory去做数据库操作,很麻烦
@Test
public void qeryByNameTest() throws IOException {
//加载核心配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//创造sqlsessionFactory
SqlSessionFactory 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);
} @Test
public void userMapperTest(){ InputStream inputStream = null;
{
try {
inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
} catch (IOException e) {
e.printStackTrace();
}
} //创造sqlsessionFactory
SqlSessionFactory 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 configuration
PUBLIC "-//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 mapper
PUBLIC "-//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` SET
username = #{username} WHERE id = #{id}
</update> <!-- 删除用户 -->
<delete id="deleteUserById" parameterType="int">
delete from user where
id=#{id}
</delete>
</mapper>