这似乎让我望而却步.我知道我可以使用地图从myBatis查询中返回一组vanilla,但是如何使用一个原始类型列表呢?
例如,如果我有SQL喜欢:
select product_price from products
Run Code Online (Sandbox Code Playgroud)
这需要resultMap吗?我曾尝试使用java.util.ArrayList作为结果类型但是找不到类错误.
与此类似,如何将项列表作为参数传递给查询.
任何输入,指向文档的指针赞赏.
有人可以解释MySQL函数LAST_INSERT_ID()的工作原理.我想在数据库中获取最后一行插入的id,但每次都得到1.
我用mybatis.
示例查询是:
<insert id="insertInto" parameterType="Something" timeout="0">
INSERT INTO something (something) VALUES (#{something})
<selectKey resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
Run Code Online (Sandbox Code Playgroud)
码:
System.out.println("Id : " + id)
Run Code Online (Sandbox Code Playgroud)
输出:
Id : 1
Run Code Online (Sandbox Code Playgroud) 我在我的生产应用程序中使用iBatis-2.3.4.726.我想迁移我的生产应用程序以使用MyBatis.
迁移过程中我需要考虑哪些要点?
是否有任何配置更改或MyBatis支持iBatis配置为已弃用的命令?
我想重写我们的服务以使用mybatis映射和连接来使我们的实体在数据库/ mybatis层上完整并完成.
<resultMap id="ParentMap" type="org.example.mybatis.Parent">
<id column="id" jdbcType="VARCHAR" property="id" />
<id column="Name" jdbcType="VARCHAR" property="name" />
<id column="SurName" jdbcType="VARCHAR" property="surName" />
<collection property="childs" column="ChildId"
javaType="ArrayList" ofType="org.example.mybatis.Child"
resultMap="org.example.ChildMap" />
</resultMap>
<resultMap id="ChildMap" type="org.example.mybatis.Parent">
<id column="id" jdbcType="VARCHAR" property="id" />
<id column="Name" jdbcType="VARCHAR" property="name" />
<id column="SurName" jdbcType="VARCHAR" property="surName" />
<id column="Age" jdbcType="INTEGER" property="age" />
</resultMap>
<sql id="Parent_Column_List">
p.Id, p.Name, p.SurName,
</sql>
<sql id="Child_Column_List">
c.Id, c.ParentId c.Name, c.SurName, c.Age
</sql>
<select id="getParent" parameterType="java.lang.String" resultMap="ParentMap" >
select
<include refid="Parent_Column_List"/>
<include refid="Child_Column_List" />
from Parent p …Run Code Online (Sandbox Code Playgroud) 我在一个mapper.xml文件中为一个表/对象编写了一个标准的select和resultMap,我想知道是否有一种方法可以通过关联,集合等上的"select"参数在另一个mapper.xml文件中使用这个select.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{HH:mm:ss} %-5level %logger{35} - %msg%n
</Pattern>
</encoder>
</appender>
<logger name="java.sql" level="DEBUG" >
<appender-ref ref="STDOUT" />
</logger>
<root>
<level value="ERROR" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我只想打印sql和错误,但它不能在Console中打印SQL,任何人都可以帮助我吗?非常感谢
今天我正在准备一个使用Spring Boot并使用MyBatis进行Spring-MyBatis旁边的数据访问通信的示例.这是相关的项目配置(使用maven):
src/main/java
- edu.home.ltmj.controller
+ CategoryController.java
- edu.home.ltmj.dao
+ CategoryDao.java
- edu.home.ltmj.domain
+ Category.java
src/main/resources
- edu.home.ltmj.dao
+ CategoryMapper.xml
Run Code Online (Sandbox Code Playgroud)
文件的相关内容:
CategoryDao.java:
package edu.home.ltmj.dao;
public interface CategoryDao {
List<Category> getAllCategories();
}
Run Code Online (Sandbox Code Playgroud)
CategoryMapper.xml:
<mapper namespace="edu.home.ltmj.dao.CategoryDao">
<resultMap id="categoryMap"
type="edu.home.ltmj.domain.Category">
<id property="id" column="id" />
<result property="name" column="name" />
</resultMap>
<select id="getAllCategories" resultMap="categoryMap">
SELECT id, nombre
FROM category
</select>
</mapper>
Run Code Online (Sandbox Code Playgroud)
然后,我在请求控制器中注入一个这个dao的实例(用于测试目的),如下所示:
package edu.home.ltmj.controller;
@RestController
public class CategoryController {
@Autowired
private CategoryDao dao;
@RequestMapping(value="/category/all",
method=RequestMethod.GET,
produces=MediaType.APPLICATION_JSON_VALUE)
public List<Categoria> getAllCategories() {
return dao.getAllCategories();
}
}
Run Code Online (Sandbox Code Playgroud)
我运行我的项目并通过使用测试执行 …
我的要求可能有点复杂.想想我有bean类:
public class A {
private String column1;
private String column2;
private Map<String,String> dynamicColumns = Maps.newHashMap();
....
getter&setter of column1 and column2
....
public void addExtraColumnValue(String column, String value) {
dynamicColumns.put(column, value);
}
}
Run Code Online (Sandbox Code Playgroud)
dynamicColumns由mapper sql决定,如下所示:
<select id="queryDynamicColumns" parameterType="java.util.Map"
resultMap="aResultMap">
select colum1,colum2, ${dynamicColumns} from table_1
</select>
Run Code Online (Sandbox Code Playgroud)
我该如何编写这个resultMap?
我想知道mybatis可以在mapper配置中支持这种映射吗?(动态列值将放入地图.)我没有从官方网站得到一个好的答案,我也尝试拦截resultSetHandler的插件似乎通过查看DefaultResultSetHandler的源代码,它没有为我的案例提供帮助.
我在我的数据库中插入了布尔值作为Y/N. 当我尝试将结果映射到布尔java类型时,它总是在我的pojo中将它设置为false.
有没有办法将String映射到布尔值?这是我的代码:
<resultMap id="getFlag" type="MyPojo">
<result property="myFlag" column="MY_FLAG"/>
</resultMap>
Run Code Online (Sandbox Code Playgroud) 我使用spring-boot,JUnit5,Mybatis.
@SpringJUnitJupiterConfig(classes = {RepositoryTestConfig.class})
@MapperScan
@Rollback
@Transactional
public class TestClass {
@Autowired
private TestMapper testMapper;
@BeforeEach
void init() {
User user = new User();
testMapper.insert(user);
}
@Test
public void test1() {
// (1) success rollback
}
@Nested
class WhenExistData {
@Test
public void test2() {
// (2) rollback not working
}
}
}
Run Code Online (Sandbox Code Playgroud)
(1)正在回滚.并输出以下日志.
2017-05-26 22:21:29 [INFO ](TransactionContext.java:136) Rolled back transaction for test context ...
Run Code Online (Sandbox Code Playgroud)
但是,(2)不起作用.我希望能够回归@Nested.