一:select
1:在UserMapper中添加对应的方法public interface UserMapper { //查询全部用户 List<User> selectUser(); //根据id查询用户 User selectUserById(int id); } 2:在UserMapper.xml中添加相应的select语句<select id="selectUserById" resultType="com.kuang.pojo.User"> select * from user where id = #{id} </select> 3:在测试类中测试@Test public void tsetSelectUserById() { SqlSession session = MybatisUtils.getSession(); //获取SqlSession连接,在自己编写的工具类获取 UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUserById(1); System.out.println(user); session.close(); } 二:传递参数的几种方式1:在接口方法中直接用@Param传值1、在接口方法的参数前加 @Param属性 2、Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型 2:万能的Map传值这种方式虽然不正规规,但是很实用 1、在接口方法中,参数直接传递Map; User selectUserByNP2(Map<String,Object> map); 2、编写sql语句的时候,需要传递参数类型,参数类型为map <select id="selectUserByNP2" parameterType="map" resultType="com.kuang.pojo.User"> select * from user where name = #{username} and pwd = #{pwd} </select> 3、在使用方法的时候,Map的 key 为 sql中取的值即可,没有顺序要求! Map<String, Object> map = new HashMap<String, Object>(); map.put("username","小明"); map.put("pwd","123456"); User user = mapper.selectUserByNP2(map); 总结:如果参数过多,我们可以考虑直接使用Map实现,如果参数比较少,直接传递参数即可 三:insert1、在UserMapper接口中添加对应的方法//添加一个用户 int addUser(User user); 2、在UserMapper.xml中添加insert语句<insert id="addUser" parameterType="com.kuang.pojo.User"> insert into user (id,name,pwd) values (#{id},#{name},#{pwd}) </insert> 3、测试@Test public void testAddUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User(5,"王五","zxcvbn"); int i = mapper.addUser(user); System.out.println(i); session.commit(); //提交事务,重点!不写的话不会提交到数据库 session.close(); } 注意点:增、删、改操作需要提交事务!或者直接在oppenSession(true),参数设置为true就自动提交事务了四:updaye1、同理,编写接口方法 //修改一个用户 int updateUser(User user); 2、编写对应的配置文件SQL <update id="updateUser" parameterType="com.kuang.pojo.User"> update user set name=#{name},pwd=#{pwd} where id = #{id} </update> 3、测试 @Test public void testUpdateUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUserById(1); user.setPwd("asdfgh"); int i = mapper.updateUser(user); System.out.println(i); session.commit(); //提交事务,重点!不写的话不会提交到数据库 session.close(); } 五:delete1、同理,编写接口方法 //根据id删除用户 int deleteUser(int id); 2、编写对应的配置文件SQL <delete id="deleteUser" parameterType="int"> delete from user where id = #{id} </delete> 3、测试 @Test public void testDeleteUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); int i = mapper.deleteUser(5); System.out.println(i); session.commit(); //提交事务,重点!不写的话不会提交到数据库 session.close(); } 六:CRDU小结
七:模糊查询like语句的写法第1种:在Java代码中添加sql通配符。 string wildcardname = “%smi%”; list<name> names = mapper.selectlike(wildcardname); <select id=”selectlike”> select * from foo where bar like #{value} </select> 第2种:在sql语句中拼接通配符,会引起sql注入 string wildcardname = “smi”; list<name> names = mapper.selectlike(wildcardname); <select id=”selectlike”> select * from foo where bar like "%"#{value}"%" </select> 配置解析一:核心配置文件
configuration(配置) properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置) environment(环境变量) transactionManager(事务管理器) dataSource(数据源) databaseIdProvider(数据库厂商标识) mappers(映射器) <!-- 注意元素节点的顺序!顺序不对会报错 --> 我们可以阅读 mybatis-config.xml 上面的dtd的头文件! 二:environments元素<environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="..." value="..."/> </transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
三:mappers元素mappers
引入资源方式 <!-- 使用相对于类路径的资源引用 --> <mappers> <mapper resource="org/mybatis/builder/PostMapper.xml"/> </mappers> <!-- 使用完全限定资源定位符(URL) --> <mappers> <mapper url="file:///var/mappers/AuthorMapper.xml"/> </mappers> <!-- 使用映射器接口实现类的完全限定类名 需要配置文件名称和接口名称一致,并且位于同一目录下 --> <mappers> <mapper class="org.mybatis.builder.AuthorMapper"/> </mappers> <!-- 将包内的映射器接口实现全部注册为映射器 但是需要配置文件名称和接口名称一致,并且位于同一目录下 --> <mappers> <package name="org.mybatis.builder"/> </mappers> Mapper文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "http:///dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.kuang.mapper.UserMapper"> </mapper>
MyBatis 的真正强大在于它的映射语句,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 为聚焦于 SQL 而构建,以尽可能地为你减少麻烦。 四:Properties优化数据库这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。具体的官方文档 我们来优化我们的配置文件 第一步 ; 在资源目录下新建一个db.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8 username=root password=123456 第二步 : 将文件导入properties 配置文件 <configuration> <!--导入properties文件--> <properties resource="db.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration> 更多操作,可以查看官方文档!【演示带领学习】
五:typeAliases优化类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。 <!--配置别名,注意顺序--> <typeAliases> <typeAlias type="com.kuang.pojo.User" alias="User"/> </typeAliases> 当这样配置时, 也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如: <typeAliases> <package name="com.kuang.pojo"/> </typeAliases> 每一个在包 若有注解,则别名为其注解值。见下面的例子: @Alias("user") public class User { ... } 去官网查看一下Mybatis默认的一些类型别名! 六:其他配置设置
类型处理器
对象工厂
生命周期和作用域作用域(Scope)和生命周期 理解我们目前已经讨论过的不同作用域和生命周期类是至关重要的,因为错误的使用会导致非常严重的并发问题。 我们可以先画一个流程图,分析一下Mybatis的执行过程! 作用域理解
|
|